我有两个 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\#/