将tar解压缩到目录中,删除压缩文件中不包含的任何文件

布雷特·罗杰斯(Brett Rogers)

假设我有一个大焦油,我会定期将其内容提取到一个恒定的位置。

我想将此位置保留为提取的tar的原始实例,并且我可以避免非常浪费的过程,因为总是使用--keep-newer-filesflag通过使用tar进行的少量更改来清除输出目录,而总是清除输出目录

但是,如何从输出位置删除存档中不再存在的文件,该怎么办?

奥斯汀·海默加恩(Austin Hemmelgarn)

标准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命令。

一些注意事项:

  • 这可能不完全符合POSIX。它应该可以在GNU bash中运行。
  • 这取决于tar如何报告档案内容以及如何创建档案。特别是,清单必须与find报告事物的方式匹配使用GNU tar和大多数档案,它应该可以工作。如果不适合您的情况,则可以通过在最里面的命令替换内使用tar命令的输出sedawk在tar命令的输出上使它正常工作
  • 在将其用于生产数据之前,请确保对其进行测试,如果由于以上两个原因之一而无法使用,则有可能从运行它的目录中删除所有内容

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将所有tar.bz2文件解压缩到目录中

将 .zip 文件解压缩到所有包含 .php 文件的目录中,其中包含文本“house”?

以递归方式将所有xlsx文件解压缩到包含原始文件名的新目录中

在iOS中解压缩文件

将单个文件中的多个文件解压缩到不同目录

如何将 .zip 文件解压缩到 lambda 函数中的目录

将tar.gz文件解压缩到目录并创建目录(如果不存在)

将文件解压缩到目标目录?

将文件解压缩到新目录

将许多文件解压缩到给定目录

将许多文件解压缩到给定目录

如何将文件解压缩到当前目录?

压缩和解压缩文件在PowerShell中4

下载并解压缩内存中的gzip压缩文件?

下载并解压缩内存中的gzip压缩文件?

如何递归复制目录中的所有文件并快速解压缩压缩文件

使用Python 2.7.5将文件夹中的所有压缩文件解压缩到同一文件夹

将tar存档解压缩到git-bash中的现有目录

解压缩时如何使用bash在Debian中压缩文件并弹出单个目录

解压缩文件

如何使用gunzip和tar将tar.gz文件解压缩到所需的特定目录?

将.xip文件解压缩到特定文件夹中

Powershell 将文件解压缩到特定文件夹中

Tomcat何时将War文件解压缩到ROOT文件夹中?

根据tar文件名将文件解压缩到目标目录

[Fluentd]如何在fluentd中解压缩文件

如何在Powershell中解压缩文件?

在.net中以编程方式解压缩文件

PowerShell中的Azure函数解压缩文件