比较两个 zip 文件的差异

Uni*_*ile 13 diff

diff 命令比较以查看两个文件之间的任何差异。是否可以使用相同的方法比较两个压缩文件,即压缩文件中的单个文件中的数据是否有任何差异,例如计数等?

小智 19

您必须解压缩它们(如果仅在内存中)以比较两者。我见过的一种很酷的方法diff是:

diff -y <(unzip -l file1.zip) <(unzip -l file2.zip)
Run Code Online (Sandbox Code Playgroud)

这将显示一个文件中是否包含任何文件而不是另一个文件

  • 我也在想同样的事情,但是添加 `-qql` 而不是 `-l` 来抑制一些噪音,并在末尾按文件名排序 `| 排序-k4` (2认同)
  • 这比较了文件的数量。但是文件里面的内容呢? (2认同)
  • @UnixPhile `diff -y --suppress-common-lines -W 333 &lt;(unzip -lqq file1.zip | sort -k 4) &lt;(unzip -lqq /file2.zip | sort -k 4)` 将抑制相同的条目并显示丢失/额外的文件以及大小或时间戳不同的文件。-W 与宽度有关,对于 looong/path/to/files 来说应该相当大。按内容进行比较需要付出更多努力,如果确实需要,请告诉我。 (2认同)

Ian*_*Ian 7

我在“zip 中的差异文件而不解压它”中发布了更长的解释,但是如果您想比较zip 文件中文件的内容并忽略所有元数据(特别是时间戳),那么您应该运行:

diff \
  <(unzip -vqq file1.zip | awk '{$2=""; $3=""; $4=""; $5=""; $6=""; print}' | sort -k3) \
  <(unzip -vqq file2.zip | awk '{$2=""; $3=""; $4=""; $5=""; $6=""; print}' | sort -k3)
Run Code Online (Sandbox Code Playgroud)