Насколько я могу судить, опция zip -T определяет только возможность извлечения файлов - на самом деле архив не проверяется на внутреннюю целостность. Например, я умышленно повредил локальный (не центральный каталог) CRC для файла, и zip это не заботило, сообщив об архиве как о ОК. Есть ли какая-нибудь другая утилита для этого?
В ZIP-файлах много внутренней избыточности, и было бы неплохо иметь возможность проверить все это. Конечно, обычно центральный каталог - это все, что вам нужно, но при восстановлении поврежденного архива часто все, что у вас есть, это фрагмент, при котором центральный каталог забит или отсутствует. Я хотел бы знать, насколько архивы, которые я создаю, можно восстановить.
unzip -t
?Ответы:
[источник: https://linux.die.net/man/1/unzip ]
источник
unzip -t
только проверяет последнее.Попытка исправить архив будет сравнивать локальные и центральные CRC, а сочетание с тестами архива позволит проверить все CRC. Если вы бежите
а также
и ни один не жалуется, что означает, что содержимое архива соответствует как центральному, так и локальному CRC. (Вы можете удалить
archivefix.zip
потом.)Чтобы убедиться в этом, начиная с исходного кода Info-ZIP для
zip
3.0, я создал файл следующим образом:Затем я повредил CRC центрального каталога
zip.txt
, изменив байт со смещением 0xB137. Я получил поведение, противоположное тому, что вы наблюдали;unzip -v
сообщил об измененном CRC из центрального каталога, ноunzip -t
иzip -T
сообщил, что файл в порядке (проверка на соответствие локальному CRC).Но работает
сообщается
В «исправленном» файле все еще указан измененный CRC для
zip.txt
.Изменение локального CRC для
zip.txt
смещения 0x10 вызвало и тоunzip -t
и другое иzip -T
сообщило об ошибке CRC, ноzip -F
не обнаружило ничего неправильного.Таким образом, из моих экспериментов несоответствия между содержимым записи архива и его CRC могут быть обнаружены следующим образом:
zip -T
иunzip -t
;zip -F
также будет жаловаться на местно-центральное несоответствиеzip -T
иunzip -t
zip -T
иunzip -t
не будет жаловаться, ноzip -F
укажет на местно-центральное несоответствие(Обратите внимание , что по умолчанию
zip -T
просто используетunzip -tqq
, такzip -T
и наunzip -t
самом деле эквивалентны Вы можете прочитать.unzip
Исходный код , чтобы проверить , что тестирование архива действительно сравнивает локальный CRC, а не центральный, искатьextract_or_test_files()
,extract_or_test_entrylist()
иextract_or_test_member()
, всеextract.c
.)источник
zip
иunzip
доступных на Unix-подобных платформах; Info-ZIP используется почти везде ...unzip -t
иzip -F
работают без ошибок, вы в порядке, и оба CRC были проверены.