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

Ale*_*lex 5 linux tar diff

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

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

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

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

Gil*_*il' 2

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

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

pax -v <(archive1.tar) <(archive2.tar)
Run Code Online (Sandbox Code Playgroud)

对于归档文件的内容,用avfs挂载它们并比较两个目录树。

mountavfs
diff -urN ~/.avfs$PWD/archive1.tar\#/ ~/.avfs$PWD/archive2.tar\#/
Run Code Online (Sandbox Code Playgroud)