एक संग्रह को ठीक करने का प्रयास स्थानीय और केंद्रीय सीआरसी की तुलना करेगा, और संग्रह परीक्षणों के साथ संयोजन से सभी सीआरसी की जांच की जा सकेगी। अगर तुम दौड़ते हो
unzip -t archive.zip
तथा
zip -F archive.zip --out archivefix.zip
और न ही शिकायत करते हैं, इसका मतलब है कि संग्रह की सामग्री केंद्रीय और स्थानीय सीआरसी दोनों से मेल खाती है। (आप archivefix.zip
बाद में हटा सकते हैं ।)
इसे सत्यापित करने के लिए zip
, 3.0 के लिए Info-ZIP स्रोत कोड के साथ शुरू करके , मैंने एक फाइल इस प्रकार बनाई:
zip -9 test.zip zip.txt zipup.c
फिर मैंने zip.txt
ऑफसेट 0xB137 पर बाइट को बदलकर केंद्रीय निर्देशिका सीआरसी को दूषित कर दिया। आपने जो देखा उसके विपरीत व्यवहार मुझे मिला; unzip -v
केंद्रीय निर्देशिका से बदल सीआरसी की सूचना दी, लेकिन unzip -t
और zip -T
खबर दी है कि फ़ाइल ठीक (स्थानीय सीआरसी के खिलाफ जाँच) था।
लेकिन दौड़ रहा है
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
"सही" फ़ाइल के लिए अभी भी परिवर्तित सीआरसी सूचीबद्ध है zip.txt
।
zip.txt
0x10 पर ऑफसेट के लिए स्थानीय CRC को बदलना दोनों का कारण बनता है unzip -t
और zip -T
CRC त्रुटि की रिपोर्ट करता है, लेकिन zip -F
कुछ भी गलत नहीं हुआ।
इस प्रकार मेरे प्रयोगों से, एक संग्रह प्रविष्टि की सामग्री और उसके सीआरसी के बीच बेमेल का पता लगाया जा सकता है:
- स्थानीय केवल:
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
कि एक संग्रह के परीक्षण वास्तव में स्थानीय सीआरसी, नहीं केंद्रीय एक तुलना की जाँच करने के स्रोत कोड, के लिए देखो extract_or_test_files()
, extract_or_test_entrylist()
और extract_or_test_member()
, सभी में extract.c
।)
unzip -t
?