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

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

我有两个 tar 存档(压缩或未压缩),我想找到这两个存档中的所有差异。两个档案都包含一个完整的文件系统(即解压时,会生成诸如/bin/home/root/usr/var/etc、...之类的目录,我希望您明白这一点)。我想要一份包含以下内容的清单:

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

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

还有另一种方法可以比较两个 tar 存档的内容吗?

答案1

diff如果您有符号链接进行比较,我认为您不会从中得到任何有用的东西。不要尝试一次性完成所有操作,而是执行两次单独的操作:一次比较元数据,一次比较文件内容。

如果您没有外来文件名,则对tar -tv或 的输出进行简单比较pax -v对于元数据部分就足够了。在 bash/ksh/zsh 中:

pax -v <(archive1.tar) <(archive2.tar)

对于存档的内容,使用以下命令挂载它们AVFS并比较两个目录树。

mountavfs
diff -urN ~/.avfs$PWD/archive1.tar\#/ ~/.avfs$PWD/archive2.tar\#/

相关内容