假设我有一个大焦油,我会定期将其内容提取到一个恒定的位置。
我想将此位置保留为提取的tar的原始实例,并且我可以避免非常浪费的过程,因为总是使用--keep-newer-files
flag通过使用tar进行的少量更改来清除输出目录,而总是清除输出目录。
但是,如何从输出位置删除存档中不再存在的文件,该怎么办?
标准tar
命令具有列出存档内容的方法。简短的形式是tar -tf archive.tar
。
通过将其与find
,,grep
和命令替换一起使用,您将获得以下内容:
rm -f $(find . -d | head -n -1 | grep -Fv "$(tar -tf archive.tar)")
在需要归档内容的目录中运行此命令,并替换archive.tar
为归档文件的路径。
从右到左为最外面的命令替换内的管道工作:
find . -d
:列出当前目录下的所有文件和目录,并按深度优先顺序列出。深度优先排序在这里很重要,因为我们计划使用此文件列表进行删除,因此在删除目录本身之前必须先删除目录内容。head -n -1
:从find
命令中排除最后一行。这将删除其/path
本身的条目,该条目可能会或可能不会出现在存档中。如果我们不是按照深度优先的顺序进行操作,则应为tail -n -1
。grep -Fv "$(tar -tf archive.tar)"
:将档案列表传递给grep命令,该命令随后会从所返回的列表中过滤掉这些行find
,因此只有档案中不是'n'的文件才会传递给outterrm
命令。一些注意事项:
find
报告事物的方式匹配。使用GNU tar和大多数档案,它应该可以工作。如果不适合您的情况,则可以通过在最里面的命令替换内使用tar命令的输出sed
或awk
在tar命令的输出上使它正常工作。本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句