Sedekat yang saya tahu opsi zip -T hanya menentukan apakah file dapat diekstraksi - itu tidak benar-benar menguji arsip untuk integritas internal. Sebagai contoh, saya sengaja merusak CRC lokal (bukan direktori pusat) untuk sebuah file, dan zip tidak peduli sama sekali, melaporkan arsip sebagai OK. Apakah ada utilitas lain untuk melakukan ini?
Ada banyak redundansi internal pada file ZIP, dan alangkah baiknya untuk memeriksa semuanya. Tentu saja, biasanya direktori pusat adalah semua yang Anda butuhkan, tetapi ketika memperbaiki arsip yang rusak sering kali yang Anda miliki hanyalah sebuah fragmen, dengan direktori pusat musnah atau hilang. Saya ingin tahu apakah arsip yang saya buat dapat dipulihkan semaksimal mungkin.
unzip -t
?Jawaban:
[sumber: https://linux.die.net/man/1/unzip ]
sumber
unzip -t
hanya menguji yang terakhir.Mencoba untuk memperbaiki arsip akan membandingkan CRC lokal dan pusat, dan menggabungkannya dengan tes arsip akan memungkinkan semua CRC diperiksa. Jika Anda berlari
dan
dan tidak ada keluhan, itu berarti isi arsip cocok dengan CRC pusat dan lokal. (Anda dapat menghapus
archivefix.zip
sesudahnya.)Untuk memverifikasi ini, dimulai dengan kode sumber Info-ZIP untuk
zip
3.0, saya membuat file sebagai berikut:Saya kemudian merusak direktori pusat CRC
zip.txt
dengan mengubah byte pada offset 0xB137. Saya mendapatkan perilaku yang berlawanan dengan apa yang Anda amati;unzip -v
melaporkan CRC yang diubah dari direktori pusat, tetapiunzip -t
danzip -T
melaporkan bahwa file itu OK (memeriksa terhadap CRC lokal).Tapi berlari
dilaporkan
File "dikoreksi" masih mencantumkan CRC yang diubah untuk
zip.txt
.Mengubah CRC lokal untuk
zip.txt
pada offset 0x10 menyebabkan keduanyaunzip -t
danzip -T
melaporkan kesalahan CRC, tetapizip -F
tidak menemukan kesalahan.Jadi dari percobaan saya, ketidaksesuaian antara isi entri arsip dan CRC-nya dapat dideteksi sebagai berikut:
zip -T
danunzip -t
;zip -F
juga akan mengeluh tentang ketidakcocokan lokal-pusatzip -T
danunzip -t
zip -T
danunzip -t
tidak akan mengeluh, tetapizip -F
akan menunjukkan ketidakcocokan lokal-sentral(Perhatikan bahwa secara default
zip -T
hanya menggunakanunzip -tqq
, jadizip -T
danunzip -t
benar-benar setara. Anda dapat membacaunzip
kode sumber untuk memeriksa bahwa pengujian arsip benar-benar membandingkan CRC lokal, bukan yang sentral; cariextract_or_test_files()
,extract_or_test_entrylist()
danextract_or_test_member()
, semuanyaextract.c
.)sumber
zip
danunzip
tersedia di platform seperti Unix; Info-ZIP digunakan hampir di mana-mana ...unzip -t
danzip -F
berjalan tanpa kesalahan, Anda OK dan kedua CRC telah diperiksa.