如何生成MD5仅依赖内部文件MD5的Zip压缩包?
如何生成MD5仅依赖内部文件内容的Zip压缩包
这个问题我之前也碰到过!默认的zip打包会把文件的修改时间、权限这类元数据也塞进压缩包,哪怕文件内容完全一样,只要元数据变了,压缩包的MD5就跟着变。不过别担心,zip命令有个专门的参数能解决这个问题——-X(或者写成--no-extra),用它打包的话,压缩包的MD5就只和内部文件的内容挂钩,和文件的创建/修改时间这些元数据无关。
原理说明
默认情况下,zip会存储文件的额外元数据(比如最后修改时间、文件权限等),这些信息的变动会导致压缩包整体的哈希值改变。而-X参数会告诉zip忽略这些可变的元数据,只基于文件的实际内容来生成压缩包,这样就保证了:只要内部文件的内容MD5一致,生成的Zip包MD5就会完全相同。
示例验证代码
# 创建初始测试文件 touch file # 查看文件内容的MD5(此时内容为空) md5 file # 使用-X参数打包,排除额外元数据 zip -X file.zip ./file # 查看当前压缩包的MD5 md5 file.zip # 修改文件的修改时间(文件内容保持不变) touch file # 再次查看文件MD5——内容没变,所以MD5和之前一致 md5 file # 重新用-X参数打包 zip -X file.zip ./file # 再次查看压缩包MD5——和第一次的结果完全相同 md5 file.zip
运行这段代码你会发现,虽然第二次修改了文件的修改时间,但文件内容的MD5没有变化,使用zip -X重新打包后,压缩包的MD5也和第一次完全一致,正好满足你的需求。
内容的提问来源于stack exchange,提问作者Volodymyr Kozubal
相关产品推荐
相关产品推荐

