Fast kann ich sagen, dass die Option zip -T nur bestimmt, ob Dateien extrahiert werden können - sie testet das Archiv nicht wirklich auf interne Integrität. Zum Beispiel habe ich absichtlich den lokalen CRC (nicht das zentrale Verzeichnis) für eine Datei beschädigt, und zip hat sich überhaupt nicht darum gekümmert. Das Archiv wurde als OK gemeldet. Gibt es ein anderes Dienstprogramm, um dies zu tun?
ZIP-Dateien weisen eine Menge interner Redundanz auf, und es wäre schön, wenn Sie alles überprüfen könnten. Normalerweise ist das zentrale Verzeichnis alles, was Sie brauchen, aber bei der Reparatur eines beschädigten Archivs ist häufig nur ein Fragment vorhanden, bei dem das zentrale Verzeichnis überfüllt ist oder fehlt. Ich möchte wissen, ob die von mir erstellten Archive so wiederherstellbar wie möglich sind.
unzip -t
?Antworten:
[Quelle: https://linux.die.net/man/1/unzip ]
quelle
unzip -t
testet nur letzteres.Beim Versuch, ein Archiv zu reparieren, werden die lokalen und zentralen CRCs verglichen, und wenn dies mit Archivtests kombiniert wird, können alle CRCs überprüft werden. Wenn du läufst
und
und beklagen Sie sich auch nicht, das heißt, der Inhalt des Archivs stimmt sowohl mit dem zentralen als auch mit dem lokalen CRC überein. (Sie können
archivefix.zip
danach löschen .)Um dies zu überprüfen
zip
, habe ich beginnend mit dem Info-ZIP-Quellcode für 3.0 eine Datei wie folgt erstellt:Ich habe dann das zentrale CRC-Verzeichnis beschädigt,
zip.txt
indem ich das Byte bei Offset 0xB137 geändert habe. Ich habe das Gegenteil von dem, was Sie beobachtet haben;unzip -v
meldete die geänderte CRC aus dem zentralen Verzeichnis, aberunzip -t
undzip -T
meldete, dass die Datei in Ordnung war (Prüfung gegen die lokale CRC).Aber rennen
berichtet
In der "korrigierten" Datei ist weiterhin die geänderte CRC für aufgeführt
zip.txt
.Das Ändern des lokalen CRC für
zip.txt
bei Offset 0x10 verursachte beideunzip -t
undzip -T
einen CRC - Fehler zu berichten, aberzip -F
nichts falsch erkennen.Aufgrund meiner Experimente können also Abweichungen zwischen den Inhalten eines Archiveintrags und seinen CRCs wie folgt festgestellt werden:
zip -T
undunzip -t
;zip -F
wird sich auch über die lokal-zentrale Fehlpaarung beschwerenzip -T
undunzip -t
zip -T
undunzip -t
beschwert sich nicht, weist jedochzip -F
auf eine lokal-zentrale Nichtübereinstimmung hin(Beachten Sie, dass standardmäßig
zip -T
verwendet einfachunzip -tqq
, sozip -T
undunzip -t
wirklich gleichwertig sind Sie das lesen können.unzip
Quellcode überprüfen, ob ein Archiv Prüfung vergleicht wirklich die lokale CRC, nicht die mittlere, suchtextract_or_test_files()
,extract_or_test_entrylist()
undextract_or_test_member()
, alles inextract.c
.)quelle
zip
undunzip
die sind auf Unix-ähnlichen Plattformen verfügbar. Info-ZIP wird so ziemlich überall verwendet ...unzip -t
undzip -F
ohne Fehler ausgeführt, Sie sind OK und beide CRCs überprüft wurden.