एक संग्रह को ठीक करने का प्रयास स्थानीय और केंद्रीय सीआरसी की तुलना करेगा, और संग्रह परीक्षणों के साथ संयोजन से सभी सीआरसी की जांच की जा सकेगी। अगर तुम दौड़ते हो
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.txt0x10 पर ऑफसेट के लिए स्थानीय CRC को बदलना दोनों का कारण बनता है unzip -tऔर zip -TCRC त्रुटि की रिपोर्ट करता है, लेकिन 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?