有两种拉链压缩文件运行diff的安全方法吗?

App*_*ood 19 compression diff

似乎这不是一个确定性的事情,或者有没有办法可靠地做到这一点?

edu*_*ffy 35

如果你正在使用gzip,你可以这样做:

# diff <(zcat file1.gz) <(zcat file2.gz)
Run Code Online (Sandbox Code Playgroud)

  • 这很好知道(我从来不知道你可以在两个程序流中管道到另一个程序而不需要制作临时文件.)但我很困惑并且遇到了bug,直到我意识到你**之间没有空格paren.** (6认同)
  • 这个答案中的解决方案如何不"以编程方式"解决您的问题? (5认同)
  • 请注意,它也适用于压缩文件:``diff &lt;(zcat file1.zip)&lt;(zcat file2.zip)'' (2认同)
  • 另外请注意,&lt;POSIX](http://pubs.opengroup.org/onlinepubs/9699919799/utilities/V3_chap02.html)中没有&lt;&lt; someCommand)语法。在[GNU Bash](https://www.gnu.org/software/bash/)中,这与`&gt;(someCommand)`语法一起被称为[Process Substitution](https://www.gnu.org/software /bash/manual/html_node/Process-Substitution.html#Process-Substitution),并且并非在所有平台上都可用。 (2认同)

Dev*_*rre 7

可靠:解压缩两者,差异.

我不知道这个答案是否适合您的使用,但它确实有用.


Che*_*eso 5

一般来说,你无法避免解压缩然后比较.不同的压缩器将导致不同的DEFLATEd字节流,当INFLATEd导致相同的原始文本时.您不能简单地将DEFLATEd数据相互比较.在某些情况下,这将失败.

但在ZIP方案中,为每个条目计算并存储CRC32.因此,如果要检查文件,可以简单地比较与每个DEFLATEd流关联的存储CRC32,以及CRC32哈希的唯一性属性的警告.它可能符合您比较FileName和CRC的需要.

您需要一个ZIP库来读取zip文件并将这些内容公开为"ZipEntry"对象上的属性.DotNetZip将为.NET应用程序做到这一点.


Wen*_*der 5

zipcmp比较zip存档zip1和zip2,并检查它们是否包含相同的文件,比较它们的名称,未压缩的大小和CRC.文件顺序和压缩的大小差异将被忽略.

sudo apt-get install zipcmp