Answers:
解压-t
测试存档文件。
此选项提取内存中的每个指定文件,并将扩展文件的CRC(循环冗余校验,增强的校验和)与原始文件的CRC值进行比较。
unzip -t
仅测试后者。
尝试修复存档将比较本地和中央CRC,并将其与存档测试结合将允许检查所有CRC。如果你跑
unzip -t archive.zip
和
zip -F archive.zip --out archivefix.zip
而且没有人抱怨,这意味着存档的内容与中央和本地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
。
将本地CRC更改为zip.txt
偏移量0x10会导致这两种情况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,没有中央一;找extract_or_test_files()
,extract_or_test_entrylist()
和extract_or_test_member()
,都在extract.c
。)
zip
并没有很多版本unzip
可用;Info-ZIP几乎无处不在...
unzip -t
和zip -F
运行没有错误,你真行和两个社区康复中心已检查。
unzip -t
呢