众所周知,一个文件的md5值是和文件内容有关,值唯一,出现相同md5值的概率比较小。相同文件zip出来的md5值一般相同,不同文件zip出来的md5值一般不会相同。但是你见过相同的文件zip之后,md5值还不同么?!
最近在交付的时候,遇到了。相同文件不同时刻zip出来的zip包,md5值竟然不同!所以一定是zip出来的包内容变了。追溯下我的工作流程。 我习惯性的用zip -r file.zip file/ 的形式来zip出来一个文件,然后直接md5sum file.zip 来查看对应的zip包的md5值。
问题出在了zip过程。具体自己bing一下zip后文件内容组成。这里只说结论和解决方法哈
造成md5值不同的变量是zip文件中的 Access Time。它存储在zip文件的 local file header 的额外字段 (extra fields) 的扩展时间戳字段 (Extended Timestamp Extra Field) 中。
那么如何zip出一个和时间无关的zip包呢?
如果你想每次 zip 打包出来的文件内容都一样,使用 -X 或 --no-extra 参数可以避免将 extra fields 打包进去就可以避免 Access Time对md5值的影响了。
网友评论