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

Linux 如何比较两个tar存档(包括文件内容、新文件/删除文件、符号链接)?,linux,symlink,tar,Linux,Symlink,Tar,我有两个tar档案(压缩或未压缩),我想找出这两个档案中的所有差异。两个归档文件都包含一个完整的文件系统(即,解包时,将生成目录,如/bin,/home,/root,/usr,/var,/etc,…我希望您能理解这一点)。我想有一个以下列表: 新文件 删除的文件 更改的文件(文件内容,而不仅仅是大小) 更改的符号链接(相对和绝对) 新建/删除的符号链接 我不能仅仅解包这些归档文件并使用diff,因为diff无法正确识别绝对符号链接(正如它们指出的归档文件的文件系统结构) 有没有其他方法来比较

我有两个tar档案(压缩或未压缩),我想找出这两个档案中的所有差异。两个归档文件都包含一个完整的文件系统(即,解包时,将生成目录,如
/bin
/home
/root
/usr
/var
/etc
,…我希望您能理解这一点)。我想有一个以下列表:

  • 新文件
  • 删除的文件
  • 更改的文件(文件内容,而不仅仅是大小)
  • 更改的符号链接(相对和绝对)
  • 新建/删除的符号链接
我不能仅仅解包这些归档文件并使用
diff
,因为diff无法正确识别绝对符号链接(正如它们指出的归档文件的文件系统结构)


有没有其他方法来比较两个tar档案的内容?

我能想到的最好方法是使用:

tar -tvf archive.tar
以列出文件的内容

比如:

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

可以使用python枚举每个tar归档的内容。这不是一个真正的答案;这是一个使用的方向。要使它正常工作,需要付出大量的努力。如果在一行中没有办法做到这一点,那就没有办法了。我只是想听听专家们的意见,如果有这样一个工具存在或者可以由一些标准的unix工具组合在一起的话。我还没有想清楚,但是
rsync
有很好的递归比较功能。因此,您可以尝试
rsync-nPavH
,看看是否可以合理地解析它的输出。另外,如果这是朝着正确的方向发展,我想,还有
librsync
。这是一个复制品吗?这里提到的一些实用程序(pkgdiff、archdiff)可能是好的。在Unix和Linux上的相同问题是:这不会检查每个文件内部的差异。否,尽管比较大小和时间戳可能是一个好的开始。