对于仅创建日期不同的源文件,如何获得 100% 相同的压缩文件?

And*_*ndy 8 compression archiving 7-zip

我希望能够无损压缩文件,如果原始文件与另一个用户的文件相同,我希望我们的两个压缩文件匹配,即使原始文件日期不同

我想在压缩时最多使用 1GB 的 RAM。我倾向于使用非对称算法,因为我拥有的文件相当大,并且在具有 1GB RAM 且没有其他任何运行的 P4 机器上使用 7-zip 格式的 LZMA1“超”压缩它们至少需要一个小时。我认为 7-zip 和 FreeARC 可以用于我的目的。我试图找到我应该使用的命令,但我运气不佳。

编辑:即使创建日期不同,也应该生成 100% 相同的文件。这应该可以通过 Freearc 中的 --nodates 和 ???? 在 7 拉链。我正在寻找 7-zip 的等效命令,以及一种跨多台计算机标准化压缩的方法。

小智 11

创建几个相同的文件:

$ echo hello > file1.test
$ echo hello > file2.test
Run Code Online (Sandbox Code Playgroud)

压缩它们...

$ gzip file1.test
$ gzip file2.test
Run Code Online (Sandbox Code Playgroud)

观察时间戳字段作为唯一的区别:

$ hexdump file1.test.gz

0000000 8b1f 0808 TIME STMP 0300 6966 656c 2e31
0000010 6574 7473 cb00 cd48 c9c9 02e7 2000 3a30
0000020 0636 0000 0000                         
Run Code Online (Sandbox Code Playgroud)

有关时间戳的更多信息,请参阅RFC

现在,您可以使用在字节 8 之后开始的 MD5,将文件中的这四个字节归零并丢失它们的时间戳,或者从这些 gzip 中提取 CRC16(另请参阅 RFC 以获取有关如何提取此信息的信息)

或者,您可以在没有时间戳的情况下进行保存:

$ echo test > file1.test
$ echo test > file2.test
$ gzip -n file1.test
$ gzip -n file2.test
$ md5sum file1.test.gz
cfe4ddf1c4c3891b4ff4a1269b42db82  file1.test.gz
$ md5sum file2.test.gz
cfe4ddf1c4c3891b4ff4a1269b42db82  file2.test.gz
Run Code Online (Sandbox Code Playgroud)


Nif*_*fle 3

不是对您问题的直接回答,但无论如何可能会有所帮助。

很久以前(另一个千年)我也遇到了同样的问题。我们想知道压缩文件是否相同,而不需要解压缩并比较它们。

我们的解决方案是在压缩文件之前获取文件的md5sum,然后压缩文件并将其重命名为md5sum.zip (.zip 或 .tar.gz 或 .rar 或 .whatever)。这样我们就知道如果两个文件具有相同的名称(没有后缀),那么它们是相同的。

  • 很好,当然*我们知道*应该阅读*我们假设*;-) (2认同)