Ao criar um aplicativo que extrai arquivos ZIP, notei que às vezes os arquivos ZIP contêm explicitamente entradas para os diretórios e às vezes não. Dada por exemplo a seguinte estrutura
folder1/
└── file1
Encontro arquivos que fornecem as seguintes saÃdas diferentes ao listar o conteúdo por meio de unzip -lv file.zip
:
Length Method Size Cmpr Date Time CRC-32 Name
-------- ------ ------- ---- ---------- ----- -------- ----
5 Stored 5 0% 2023-04-20 13:54 3bb935c6 folder1/file1
-------- ------- --- -------
5 5 0% 1 file
Length Method Size Cmpr Date Time CRC-32 Name
-------- ------ ------- ---- ---------- ----- -------- ----
0 Stored 0 0% 2023-04-20 13:54 00000000 folder1/
5 Stored 5 0% 2023-04-20 13:54 3bb935c6 folder1/file1
-------- ------- --- -------
5 5 0% 2 files
Observe a pasta declarada explicitamente no segundo.
Qual é o padrão aqui? Os programas geralmente fazem suposições sobre como isso é tratado? Um dos dois é vantajoso?
O padrão não especifica isso, mas a prática comum é armazenar diretórios como entradas separadas, para que os metadados do diretório também possam ser armazenados.
Como os arquivos ZIP sem entradas de diretório separadas são válidos, os programas não devem fazer suposições sobre eles de qualquer maneira.
(Com Info-Zip
zip
, o-D
sinalizador pula o armazenamento de entradas de diretório.)