如何根据 gzip 压缩的 tar 文件的内容从目录中删除文件?

如何根据 gzip 压缩的 tar 文件的内容从目录中删除文件?

鉴于我:

  • 有一个包含超过 1000 个文件的目录
  • 有一个经过 gzip 压缩的 tar 文件,其中包含这些文件的子集 (x.tgz)

将读取 gzip 压缩的 tar 文件的内容并从 tar 文件中包含的目录中删除所有文件的单个命令行(如果可能)是什么?

答案1

您需要位于创建 tar 文件的目录,例如$HOME.然后,如果您的 Documents 目录中有一个安全的 tgz,/backup/Documents.tgz您可以执行以下操作:

$ for file in $(tar -tzf /backup/Documents.tgz); do \
      [[ -f $file ]] && rm $file || echo "$file does not exist"; done

如果您还想删除目录,您可以使用rm -fr $file.

答案2

也许这样的事情会对你有帮助

rm -rf `find . -name '*.tgz' -exec tar -tzf '{}' \;`

不确定它如何处理这么多文件。

答案3

$ tar -tzf x.tgz  |grep -v '/$' | xargs -n1 -d '\n' echo rm

echo如果看起来不错,请将其删除。

解释:

  • tar -tzf x.tgz -- 列出内容
  • grep -v '/$'-- 跳过目录
  • xargs -n1 -d '\n' echo rm-- 对于每一 ( -n1) 行 ( -d '\n') 输入,运行echo rm

答案4

由于 tar (即使在非详细模式下)在tar t输出中列出了符号链接和硬链接,因此您无法使用tar t来获取文件列表。更好的使用:

star -t -tpath < archive.tar > file-list.txt

相关内容