我有一个用.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与原始文件夹和子文件夹进行递归比较?
答案 0 :(得分:2)
根据this site,tar
的行为符合预期。
您应该再次注意,虽然
--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 -y
或comm
命令获得更易读的输出。