![比较两个 zip 文件的差异](https://linux22.com/image/136091/%E6%AF%94%E8%BE%83%E4%B8%A4%E4%B8%AA%20zip%20%E6%96%87%E4%BB%B6%E7%9A%84%E5%B7%AE%E5%BC%82.png)
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.php
并index.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 ' ')