アーカイブを修正しようとすると、ローカルCRCと中央CRCが比較され、それをアーカイブテストと組み合わせることで、すべてのCRCをチェックできます。走ったら
unzip -t archive.zip
そして
zip -F archive.zip --out archivefix.zip
どちらも文句を言うことはありません。つまり、アーカイブの内容は中央CRCとローカルCRCの両方に一致します。(archivefix.zip後で削除できます。)
これを確認するため、zip3.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?