比较两个 zip 文件的差异

比较两个 zip 文件的差异

diff 命令比较以查看两个文件之间的差异。是否可以使用相同的方法来比较两个 zip 文件,即压缩文件中各个文件的数据(例如计数等)是否存在差异?

答案1

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

diff -y <(unzip -l file1.zip) <(unzip -l file2.zip)

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

答案2

我发布了更长的解释在“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)

答案3

比较 ZIP 文件和目录的一种选择是使用zipcmp正如另一篇文章中提到的。

zipcmp只要 ZIP 档案使用相同的目录结构就可以工作。

如果您需要比较具有相同文件的 2 个 ZIP 存档,但在一个存档中,文件包含在另一个子目录中,zipcmp将所有文件标记为已修改,这可能是一个问题。所以zipcmp只能用来验证内容是否完全相同。

我创建文件夹差异因为在某些用例中,您希望将 Web 应用程序的备份与可信来源进行比较。

例如,如果您想查找修改过的文件(例如可能的后门),您可以使用文件夹差异用于此任务,并且可以与 ZIP 存档和文件夹一起使用。

例子:

Wordpress 使用 ZIP 存档,存档中的文件存储在名为 的文件夹中wordpress。在此示例中,文件被提取到/var/www/但没有wordpress子文件夹。

文件夹差异可以使用参数忽略wordpress/安装存档中的文件夹,--prefix并仅列出webshell.phpindex.php作为不同的文件。

$ folderdiff wordpress-6.0.3-de_AT.zip backup.zip --prefix wordpress/
===================== Added ======================
+ webshell.php
==================== Modified ====================
* index.php

zipcmp由于存档中使用的路径不同,无法比较文件。

答案4

校验和是正确的方法。

diff <(md5sum file1.zip | cut -f1 -d ' ') <(md5sum file2.zip | cut -f1 -d ' ')

相关内容