gunzip 和 gzip 之后的 Md5 校验和不同

gunzip 和 gzip 之后的 Md5 校验和不同

我无意中删除了一个文件夹中的一些 gzip 文件。幸好,我已将它们解压到其他位置,目前正在恢复它们。我有旧文件(现已删除)的 md5 校验和,但新压缩文件的校验和不匹配。糟糕。

但是...我有另一个文件夹,其中包含来自同一来源的类似 gzip 文件,当我gunzip立即打开gzip其中一个文件时,校验和再次不同,这让我怀疑文件的创建者对 gzip 使用了不同的参数(如果有其他解释,我很乐意听到)。

有什么方法可以识别所使用的 gzip 参数,以便我可以验证我的操作没有弄乱文件的内容?

答案1

标准 Unixfile实用程序为您提供有关 .gz 文件的一些基本信息,例如:

$ file foo.gz
foo.gz: gzip compressed data, was "foo", from Unix, last modified: Tue Aug  1 14:19:21 2017, max compression

如您所见,标头存储了原始文件名、执行压缩的操作系统、修改时间和压缩级别。请注意,如果您执行了类似 的操作,原始文件名可能会有所不同gzip -c tempfile > foo.gz,在这种情况下,原始文件名将是tempfile。或者,如果 gzip 由于从流中读取而未获得原始文件名(例如tar czf foo.tar.gz somedir),它甚至可能不存在。

因此,您可能首先想了解哪些因素可能会有所不同。我不知道这一切对您来说有多重要,但您可以看看RFC 1952,给出文件格式。您可以尝试不同的设置,甚至可以对某些字段进行十六进制编辑,以匹配创建者的格式(如不同的操作系统)。

答案2

所有这些实用程序都包含一些元信息,这些信息每次运行时都会发生变化,因此即使是相同的文件,ZIP 也会略有不同(因此 MD5 也不同)。要比较内容,您必须解压它们。

如果你查找维基百科中的 GZIP,您了解到 GZip 文件以一个 10 字节的标头,包含一个魔法数字 (1f 8b)、一个版本号以及时间戳换句话说,每次运行都保证会产生不同的文件。

相关内容