Tar递归与原始文件夹比较

时间:2017-11-07 15:49:10

标签: linux bash recursion sh tar

我有一个用.tgz制作的tar cvzf tartest.tgz tester/*文件,如果我用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与原始文件夹进行比较,一切正常,没有问题,没有错误

如果我在测试人员文件夹中添加文件 20171006_183137.png ,然后重试,我会收到错误,如预期的那样:

 tar: tester/20171006_183137.png: Not found in archive
 tar: Exiting with failure status due to previous errors

如果我在 tester / tests 文件夹中添加文件 20171006_183137.png ,然后重试,则不会出现错误和空白输出。

如果我在上次测试中添加 -v 选项,我只需获取tar中的文件列表。

有没有办法将tar与原始文件夹和子文件夹进行递归比较?

1 个答案:

答案 0 :(得分:2)

根据this sitetar的行为符合预期。

  

您应该再次注意,虽然--compare-d)确实会导致tar   报告存档中文件中不存在的文件   系统,tar会忽略活动文件系统中没有的文件   存档中存在。

您为tar -df tartest.tgz tester/*收到的错误确实是错误(!)而不是像存档和目录不同«这样的消息。 tar不知道如何处理档案中没有的文件。

如果您还想比较另一种方法,可以使用this answer中描述的方法(装载或解压缩存档并对原始目录使用diff -r)。

如果您只对文件存在而不是内容,访问日期等感兴趣,您可以列出存档和原始目录中的文件名,并将它们与diff进行比较:

diff <(tar -tf tartest.tgz | sort) <(find tester/ | sort)

只有当没有包含换行符的文件名时,该命令才有效 使用diff -ycomm命令获得更易读的输出。