アーカイブを修正しようとすると、ローカルCRCと中央CRCが比較され、それをアーカイブテストと組み合わせることで、すべてのCRCをチェックできます。走ったら
unzip -t archive.zip
そして
zip -F archive.zip --out archivefix.zip
どちらも文句を言うことはありません。つまり、アーカイブの内容は中央CRCとローカルCRCの両方に一致します。(archivefix.zip
後で削除できます。)
これを確認するため、zip
3.0のInfo-ZIPソースコードから始めて、次のようにファイルを作成しました。
zip -9 test.zip zip.txt zipup.c
次にzip.txt
、オフセット0xB137のバイトを変更して、中央ディレクトリのCRCを破損しました。私はあなたが観察したものと反対の行動を得ました。unzip -v
中央ディレクトリから変更されたCRC unzip -t
をzip -T
報告しましたが、ファイルは問題ないことを報告しました(ローカルCRCをチェック)。
しかし、実行中
zip -F test --out testfix
報告
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
「修正済み」ファイルには、まだ変更されたCRCがリストされていますzip.txt
。
zip.txt
オフセット0x10でローカルCRCを変更する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ではなく、中央の1と比較することを確認するためにソースコードを、見ためのextract_or_test_files()
、extract_or_test_entrylist()
およびextract_or_test_member()
、全部でextract.c
。)
unzip -t
?