为什么从完全相同的起始文件以完全相同的方式生成的压缩文件之间存在二进制差异?

为什么从完全相同的起始文件以完全相同的方式生成的压缩文件之间存在二进制差异?

我使用“diff”命令比较使用 zip 生成的两个压缩文件,起始文件完全相同,结果显示它们不同。但是,当我解压它们并使用“diff”命令时,没有显示任何差异。我在 zip 和 gzip 中都注意到了这一点。

答案1

如果您确实想比较压缩内容,您可能还想使用 zdiff。

答案2

其中一个字段gzip 标头两个文件之间的差异。其中一个字段是压缩文件的最后修改时间(自 1970 年以来以秒为单位),或者如果压缩数据不是从文件中读取的,则为文件压缩的​​时间。

即使一秒钟的差异也足以导致 gzip 文件不匹配。

答案3

您可以使用 gzip 选项--no-name(或-n)阻止 gzip 将原始文件名和时间戳添加到 gzip 标头。这应该可以防止数据相同时出现不匹配的情况(假设使用相同的压缩级别)。将此选项添加到 gzip 命令的一种方法是设置GZIP环境变量,以便每个 gzip 命令都使用该选项。例如,在 Bourne 兼容的 shell(如 bash)中,

export GZIP="--no-name -6"

或者

export GZIP=--no-name

答案4

可能有两个原因:

  • 同一压缩程序使用不同的压缩算法,或
  • 不同的压缩程序

相关内容