unzip -t
Test archive files.
This option extracts each specified file in memory and compares the CRC (cyclic redundancy check, an enhanced checksum) of the expanded file with the original's stored CRC value.
[fonte: link ]
Por mais próximo que eu possa dizer, a opção zip -T determina apenas se os arquivos podem ser extraídos - ele realmente não testa o arquivo quanto à integridade interna. Por exemplo, eu deliberadamente corrompi o CRC local (não o diretório central) de um arquivo, e o zip não se importou, reportando o arquivo como OK. Existe algum outro utilitário para fazer isso?
Há muita redundância interna em arquivos ZIP, e seria bom ter uma maneira de verificar tudo. Naturalmente, 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 danificado ou faltando. Gostaria de saber se os arquivos criados por mim são tão recuperáveis quanto possível.
unzip -t
Test archive files.
This option extracts each specified file in memory and compares the CRC (cyclic redundancy check, an enhanced checksum) of the expanded file with the original's stored CRC value.
[fonte: link ]
A tentativa de consertar um arquivo irá comparar os CRCs locais e centrais, e combiná-lo com testes de arquivamento permitirá que todos os CRCs sejam verificados. Se você correr
unzip -t archive.zip
e
zip -F archive.zip --out archivefix.zip
e nem reclamar, isso significa que o conteúdo do arquivo corresponde aos CRCs centrais e locais. (Você pode excluir archivefix.zip
depois).
Para verificar isso, começando com o código-fonte do Info-ZIP para zip
3.0, criei um arquivo da seguinte forma:
zip -9 test.zip zip.txt zipup.c
Em seguida, eu corrompi o diretório central CRC para 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, mas unzip -t
e zip -T
relataram que o arquivo estava OK (verificando o CRC local).
Mas correndo
zip -F test --out testfix
relatado
Fix archive (-F) - assume mostly intact archive
Zip entry offsets do not need adjusting
copying: zip.txt
zip warning: Local Entry CRC does not match CD: zip.txt
copying: zipup.c
O arquivo "corrigido" ainda listou o CRC alterado para zip.txt
.
A alteração do CRC local para zip.txt
no deslocamento 0x10 fez com que unzip -t
e zip -T
reportassem um erro de CRC, mas zip -F
não detectou nada de errado.
Assim, a partir de minhas experiências, as diferenças entre o conteúdo de uma entrada de arquivo e seus CRCs podem ser detectados da seguinte forma:
zip -T
e unzip -t
; zip -F
também reclamará sobre a incompatibilidade local / central zip -T
e unzip -t
zip -T
e unzip -t
não se queixam, mas zip -F
indicará uma incompatibilidade entre central local (Por padrão, zip -T
simplesmente usa unzip -tqq
, então zip -T
e unzip -t
são realmente equivalentes. Você pode ler o código fonte unzip
para verificar se testar um arquivo realmente compara o CRC local, não o central, procure por extract_or_test_files()
, extract_or_test_entrylist()
e extract_or_test_member()
, todos em extract.c
.)
Tags zip