如何检查目录是否包含与 TAR 档案相同的文件?

如何检查目录是否包含与 TAR 档案相同的文件?

假设我有一个文件夹Documents和一个 TAR 文件Documents.tar,如何检查 tar 文件是否包含目录中存在的相同文件?

对我来说更明显的解决方案是:

$ tar xvf Documents.tar -C untarDocs
$ diff -r Documents untarDocs

不幸的是,这对于大型 TAR 文件来说非常慢,还有其他选择吗?

*更新:(tar -dvf Documents.tar或--diff,--compare)不起作用,因为它无法检测文件系统中存在但不在 TAR 文件中的文件,它只能检测 TAR 文件中存在但不在文件系统中的文件,例如:

$ mkdir new
$ touch new/foo{1..4}
$ tar cvf new.tar new/
$ touch new/bar
$ tar --diff --verbose --file=new.tar       #### doesn't detect new/bar #########
$ rm new/foo1
$ tar --diff --verbose --file=new.tar

输出

new/
new/foo2
new/foo3
new/foo4
new/foo1
tar: new/foo1: Warning: Cannot stat: No such file or directory   ### works ###

答案1

假设您已将目录打包成 tar/etc文件,现在想要将 tar 文件列表与实时文件系统进行比较。您可以使用以下命令生成文件列表,然后生成diff两个列表。

要生成实时文件系统列表:

find /etc | cut -c 2- | sort > fs.list

列出 tar 里面的文件:

tar -tf etc.tar.gz | sed 's//$//' | sort > tar.list

最后,将两个列表进行比较:

diff fs.list tar.list

请注意,这里的cut机制sed仅用于处理开始/结束斜线。也许您可以使用更简洁的方法来删除有问题的斜线,但上面的示例应该可以工作。

相关内容