Tar递归比较与原始文件夹

8

我有一个由tar cvzf tartest.tgz tester/*创建的.tgz文件,如果我使用tar --list -f tartest.tgz命令列出tar文件,我会得到以下的结构:

 tester/2017-08-02_131404.png
 tester/cfg.pdf
 tester/tests/
 tester/tests/1.png
 tester/tests/2.png
 tester/tests/3.png
 tester/tests/4.png
 tester/tests/5.png

如果我使用tar -df tartest.tgz tester/*命令将tar档案与原始文件夹进行比较,一切正常,没有问题,也没有错误。
如果我在tester文件夹中添加文件20171006_183137.png并重试,则会出现预期的错误。
 tar: tester/20171006_183137.png: Not found in archive
 tar: Exiting with failure status due to previous errors

如果我将文件20171006_183137.png添加到tester/tests文件夹中,并重试,则不会出现错误和空输出。
如果在最后一次测试期间添加-v选项,我只会得到tar文件中文件的列表。
是否有一种方法可以递归比较tar文件与原始文件夹及其子文件夹?

2
Stack Overflow是一个关于编程和开发问题的网站。这个问题似乎不属于编程或开发范畴。请参阅帮助中心中的我可以在这里问什么样的问题。也许超级用户Unix&Linux Stack Exchange更适合提问。 - jww
1个回答

3
根据此网站tar的行为符合预期。
请注意,虽然--compare (-d)会导致tar报告归档文件中不存在于文件系统中的文件,但tar会忽略存在于活动文件系统而不存在于存档中的文件。
对于tar -df tartest.tgz tester/*,您收到的错误确实是一个错误(!) 而不是像“archive and directory differ”这样的消息。 tar不知道如何处理未包含在档案中的文件。
如果您还想进行另一种比较方式,可以使用此答案中描述的方法(将存档文件挂载或解压缩并使用diff -r与原始目录进行比较)。
如果您只关心文件的存在而不关心内容、访问日期等信息,则可以从存档文件和原始目录中列出文件名,并使用diff进行比较:
diff <(tar -tf tartest.tgz | sort) <(find tester/ | sort)

该命令仅适用于没有换行符的文件名。
使用diff -ycomm命令可获得更易读的输出结果。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接