12

当我在 Linux 中压缩(Zip 2.31)同一个文件时,每次都会得到不同的校验和。如何保持与上次相同的 md5sum?我正在使用来自 yum 的最新 zip 更新

4

3 回答 3

26

正在生成的存档不仅包含压缩文件数据,还包含“额外文件属性”(如zip 文档中所述),如文件时间戳、文件属性......

如果此元数据在压缩之间不同,您将永远不会获得相同的校验和,因为压缩文件的元数据已更改并已包含在存档中。

您可以使用zip'-X选项(或 long--no-extra选项)来避免在存档中包含文件的额外属性

zip -X foo.zip foo-file

在不修改文件的情况下连续运行此命令不得更改存档的哈希值。

于 2013-10-22T16:19:01.653 回答
3

既不为我工作,-X也不-D为我工作。看起来 zip 仍然在存档中设置时间戳,导致相同内容的哈希不匹配。

我通过手动设置文件时间戳解决了这个问题:

touch -t 202001010000 file
于 2021-02-10T14:25:18.063 回答
3

按照@mc-nd 的答案中的建议添加-X标志对我来说在单文件 zip 上效果很好。

但是当我压缩一个目录时(node_modules就我而言),每次重新安装时我都会得到不同的哈希值node_modules

解决方法是还添加-D标志:

-D
   --no-dir-entries
          Do  not  create entries in the zip archive for directories.  
          Directory entries are created by default so that their attributes can
          be saved in the zip archive.
于 2020-04-06T10:34:39.077 回答