Pelo que sei, a opção zip -T determina apenas se os arquivos podem ser extraídos - na verdade, não testamos a integridade interna do arquivo. Por exemplo, corrompi deliberadamente o CRC local (não o diretório central) de um arquivo, e o zip não se importava, relatando o arquivo como OK. Existe algum outro utilitário para fazer isso?
Há muita redundância interna nos arquivos ZIP, e seria bom ter uma maneira de verificar tudo. Obviamente, normalmente o diretório central é tudo o que você precisa, mas ao reparar um arquivo corrompido, muitas vezes tudo o que você tem é um fragmento, com o diretório central bloqueado ou ausente. Gostaria de saber se os arquivos criados são o mais recuperáveis possível.
unzip -t
?Respostas:
[fonte: https://linux.die.net/man/1/unzip ]
fonte
unzip -t
apenas testa o último.Tentar corrigir um arquivo compactado comparará os CRCs locais e centrais e combiná-lo com os testes de arquivamento permitirá que todos os CRCs sejam verificados. Se você correr
e
e nenhuma reclamação, isso significa que o conteúdo do arquivo corresponde aos CRCs centrais e locais. (Você pode excluir
archivefix.zip
posteriormente.)Para verificar isso, começando com o código-fonte Info-ZIP para
zip
3.0, criei um arquivo da seguinte maneira:Eu então corrompi o diretório central CRC
zip.txt
alterando o byte no deslocamento 0xB137. Eu tenho o comportamento oposto ao que você observou;unzip -v
relatou o CRC alterado a partir do diretório central, masunzip -t
ezip -T
relatou que o arquivo foi OK (verificação contra o CRC local).Mas correndo
relatado
O arquivo "corrigido" ainda listava a CRC alterada para
zip.txt
.Alterar o CRC local para o
zip.txt
deslocamento 0x10 causou os doisunzip -t
ezip -T
relatou um erro do CRC, maszip -F
não detectou nada de errado.Assim, a partir de minhas experiências, as incompatibilidades entre o conteúdo de uma entrada de arquivo e seus CRCs podem ser detectadas da seguinte maneira:
zip -T
eunzip -t
;zip -F
também reclamará da incompatibilidade local-centralzip -T
eunzip -t
zip -T
eunzip -t
não irá reclamar, maszip -F
indicará uma incompatibilidade local-central(Note que por padrão
zip -T
simplesmente usaunzip -tqq
, por issozip -T
eunzip -t
realmente são equivalentes Você pode ler o.unzip
Código fonte para verificar se testar um arquivo realmente compara o CRC local, e não a um central; olhar paraextract_or_test_files()
,extract_or_test_entrylist()
eextract_or_test_member()
, tudo emextract.c
.)fonte
zip
e estãounzip
disponíveis em plataformas semelhantes ao Unix; Info-ZIP é usado praticamente em todos os lugares ...unzip -t
ezip -F
executar sem erro, você está bem e os dois CRCs foram verificados.