如何比较两个 tar 档案(包括文件内容、新/删除的文件、符号链接)?

Posted

技术标签:

【中文标题】如何比较两个 tar 档案(包括文件内容、新/删除的文件、符号链接)?【英文标题】:How to compare two tar archives (including file content, new/removed files, symlinks)? 【发布时间】:2013-11-12 13:19:10 【问题描述】:

我有两个 tar 档案(压缩或未压缩),我想找出这两个档案中的所有差异。两个档案都包含一个完整的文件系统(即解压缩时,会生成像/bin/home/root/usr/var/etc、...我希望你明白这一点) .我想要以下列表:

新文件 删除的文件 更改的文件(文件内容,而不仅仅是大小) 更改的符号链接(相对和绝对) 新的/删除的符号链接

我不能只解压这些档案并使用diff,因为 diff 无法正确识别绝对符号链接(因为它们会指出档案的文件系统结构)。

还有其他方法可以比较两个 tar 档案的内容吗?

【问题讨论】:

您可以使用 python 枚举每个 tar 存档的内容。这不是一个真正的答案。这是一个使用方向。要让它正常工作需要付出不小的努力 如果没有办法在一行中做到这一点,那就没有了。我只是想听听专家的意见,如果这样的工具存在或者可以通过一些标准的 unix 工具组合在一起。 我还没有想过,但是rsync 有很好的递归比较能力。所以,你可以试试rsync -nPavH <unpacked-tar-1> <unpacked-tar-2>,看看你能不能合理地解析它的输出。另外,如果这是朝着正确的方向发展,我认为还有librsync 这是***.com/questions/1030545/… 的副本吗?那里提到的一些实用程序(pkgdiff、archdiff)可能很好。 Unix 和 Linux 上的相同问题:unix.stackexchange.com/q/100889/34251 【参考方案1】:

我能想到的最好的就是使用:

tar -tvf archive.tar

列出文件的内容。

类似:

tar -tvf archive1.tar > list1
tar -tvf archive2.tar > list2
diff list1 list2

【讨论】:

这不会检查每个文件中的差异。 不,虽然比较大小和时间戳可能是一个好的开始。

以上是关于如何比较两个 tar 档案(包括文件内容、新/删除的文件、符号链接)?的主要内容,如果未能解决你的问题,请参考以下文章

linux下如何解压文件

在Linux 中如何归档文件和目录

tar命令

Linux命令学习-tar命令

linux下使用tar命令

linux下使用tar命令