'tar' 'find' 的结果,保留目录结构

Kam*_*her 7 bash tar pipe find shell-script

我想对作为find命令结果获得的所有*.txt文件进行tar 压缩,这些文件存在于具有如下树结构的目录中:

  • 目录名称
    • 目录 1
      • 文件1.pdf
      • 文件1.txt
    • 目录2
      • 文件2.pdf
      • 文件2.txt
    • 目录3
      • 文件3.pdf
      • 文件3.txt

(文件名只是示例)。

但我想保留目录结构

什么命令可以给我一个包含此内容的tar.gz文件?

  • 目录 1
    • 文件1.txt
  • 目录2
    • 文件2.txt
  • 目录3
    • 文件3.txt

out*_*yer 12

您可以使用xargs将命令的输出作为参数提供给另一个:

find . -iname '*.txt' -print0 | xargs -0 tar zcvf the_tarball.tar.gz
Run Code Online (Sandbox Code Playgroud)

请注意这里-print0from find 和-0from xargs 一起工作以正确分隔文件名(以便名称带有空格等不是问题)。

  • xargs 甚至不是必需的,您可以通过标准输入将 find 的输出直接传送到 tar。对于您的示例:``` find 。-iname '*.txt' | tar zcvf the_tarball.tar.gz --files-from -``` 在这里解释:http://stackoverflow.com/a/9534272/4017010 并且这里已经讨论了一般主题:http://unix.stackexchange.com /questions/5641/tar-up-all-pdfs-in-a-directory-retaining-directory-structure (6认同)