Por lo que puedo decir, la opción zip -T solo determina si se pueden extraer los archivos; realmente no prueba la integridad interna del archivo. Por ejemplo, dañé deliberadamente el CRC local (no el directorio central) para un archivo, y zip no me importó en absoluto, informando que el archivo estaba bien. ¿Hay alguna otra utilidad para hacer esto?
Hay mucha redundancia interna en los archivos ZIP, y sería bueno tener una forma de verificarlo todo. Por supuesto, normalmente el directorio central es todo lo que necesita, pero al reparar un archivo dañado a menudo todo lo que tiene es un fragmento, con el directorio central tropezado o faltante. Me gustaría saber si los archivos que creo son lo más recuperables posible.
unzip -t
?Respuestas:
[fuente: https://linux.die.net/man/1/unzip ]
fuente
unzip -t
solo prueba esto último.Intentar arreglar un archivo comparará los CRC locales y centrales, y combinar eso con las pruebas de archivo permitirá verificar todos los CRC. Si tu corres
y
y tampoco se quejan, eso significa que el contenido del archivo coincide con los CRC centrales y locales. (Puede eliminar
archivefix.zip
después).Para verificar esto, comenzando con el código fuente Info-ZIP para
zip
3.0, creé un archivo de la siguiente manera:Luego corrompí el directorio central CRC
zip.txt
cambiando el byte en el desplazamiento 0xB137. Obtuve el comportamiento opuesto a lo que observaste;unzip -v
informó el CRC alterado desde el directorio central, perounzip -t
ezip -T
informó de que el archivo estaba bien (comprobación con la CDN local).Pero corriendo
reportado
El archivo "corregido" todavía enumeraba el CRC alterado para
zip.txt
.La alteración de la CRC local
zip.txt
en el desplazamiento 0x10 causó ambosunzip -t
ezip -T
informar un error de CRC, perozip -F
no detectó nada malo.Por lo tanto, a partir de mis experimentos, los desajustes entre el contenido de una entrada de archivo y sus CRC se pueden detectar de la siguiente manera:
zip -T
yunzip -t
;zip -F
también se quejará de la discordancia local-centralzip -T
yunzip -t
zip -T
yunzip -t
no se quejará, perozip -F
indicará un desajuste local-central(Tenga en cuenta que por defecto
zip -T
simplemente utilizaunzip -tqq
, por lo quezip -T
yunzip -t
realmente son equivalentes Puede leer el.unzip
Código fuente para comprobar que las pruebas de un archivo realmente compara el CRC local, no el central, buscarextract_or_test_files()
,extract_or_test_entrylist()
yextract_or_test_member()
, en todoextract.c
.)fuente
zip
y estánunzip
disponibles en plataformas similares a Unix; Info-ZIP se usa prácticamente en todas partes ...unzip -t
y sezip -F
ejecutan sin error, está bien y ambos CRC han sido verificados.