Autant que je sache, l'option zip -T détermine uniquement si les fichiers peuvent être extraits - elle ne teste pas vraiment l'intégrité de l'archive. Par exemple, j'ai délibérément corrompu le CRC local (pas le répertoire central) pour un fichier, et zip ne s'en souciait pas du tout, signalant que l'archive était OK. Existe-t-il un autre utilitaire pour le faire?
Il y a beaucoup de redondance interne dans les fichiers ZIP, et ce serait bien d'avoir un moyen de tout vérifier. Bien sûr, normalement, le répertoire central est tout ce dont vous avez besoin, mais lors de la réparation d'une archive corrompue, tout ce que vous avez est souvent un fragment, avec le répertoire central encombré ou manquant. Je voudrais savoir si les archives que je crée sont aussi récupérables que possible.
unzip -t
?Réponses:
[source: https://linux.die.net/man/1/unzip ]
la source
unzip -t
ne teste que ce dernier.Tenter de réparer une archive comparera les CRC locaux et centraux, et la combiner avec des tests d'archives permettra de vérifier tous les CRC. Si vous courez
et
et ni l'un ni l'autre ne se plaignent, cela signifie que le contenu de l'archive correspond à la fois aux CRC central et local. (Vous pouvez supprimer
archivefix.zip
ensuite.)Pour vérifier cela, en commençant par le code source Info-ZIP pour
zip
3.0, j'ai créé un fichier comme suit:J'ai ensuite corrompu le répertoire central CRC pour
zip.txt
en modifiant l'octet à l'offset 0xB137. J'ai eu le comportement opposé à ce que vous avez observé;unzip -v
a rapporté le CRC modifié à partir du répertoire central, maisunzip -t
et azip -T
indiqué que le dossier était OK (vérification contre le CRC local).Mais courir
signalé
Le fichier "corrigé" répertorie toujours le CRC modifié pour
zip.txt
.La modification du CRC local pour le
zip.txt
décalage 0x10 a causé les deuxunzip -t
etzip -T
pour signaler une erreur CRC, maiszip -F
n'a rien détecté de mal.Ainsi, d'après mes expériences, les décalages entre le contenu d'une entrée d'archive et ses CRC peuvent être détectés comme suit:
zip -T
etunzip -t
;zip -F
se plaindra également de l'inadéquation local-centralzip -T
etunzip -t
zip -T
etunzip -t
ne se plaindra pas, maiszip -F
indiquera un décalage local-central(Notez que par défaut
zip -T
utilise simplementunzip -tqq
, sozip -T
etunzip -t
vraiment sont équivalents. Vous pouvez lire leunzip
code source pour vérifier que tester une archive compare vraiment le CRC local, pas le central; recherchezextract_or_test_files()
,extract_or_test_entrylist()
etextract_or_test_member()
, le toutextract.c
.)la source
zip
etunzip
disponibles sur les plateformes de type Unix; Info-ZIP est utilisé à peu près partout ...unzip -t
etzip -F
s'exécutent sans erreur, vous êtes OK et les deux CRC ont été vérifiés.