如何tar所有子目录中的某些文件类型?

时间:2013-09-11 02:11:13

标签: linux tar

我想tar和目录及其子目录中的所有.php和.html文件。如果我使用

tar -cf my_archive *

它包含了我不想要的所有文件。如果我使用

tar -cf my_archive *.php *.html

它忽略了子目录。如何递归地使用tar,但只包含两种类型的文件?

7 个答案:

答案 0 :(得分:100)

find ./someDir -name "*.php" -o -name "*.html" | tar -cf my_archive -T -

答案 1 :(得分:8)

一种方法是:

tar -cf my_archive.tar $( find -name "*.php" -or -name "*.html" )

然而,这种方法有一些注意事项:

  1. 如果有任何文件或目录中包含空格,则会失败,
  2. 如果文件太多,最大命令行长度已满,则会失败。
  3. 这些解决方法可能是将find命令的内容输出到文件中,然后使用“-T,--files-from FILE”选项来tar。

答案 2 :(得分:3)

要压缩具有不同模式的多个文件,我们可以将它们与空格分开并将它们全部添加到gz文件中,如下所示:

tar -czvf deploy.tar.gz **/Alice*.yml **/Bob*.json

这将添加从任何子目录以Alice开头的所有.yml文件,并从任何子目录添加以Bob开头的所有.json文件。

答案 3 :(得分:0)

这将处理带空格的路径:

find ./ -type f -name "*.php" -o -name "*.html" -exec tar uvf myarchives.tar {} +

答案 4 :(得分:0)

将它们放在一个文件中

print()

然后使用该文件作为tar的输入,根据您使用的tar版本使用-I或-T

使用h复制符号链接

find . \( -name "*.php" -o -name "*.html" \) -print > files.txt

答案 5 :(得分:0)

find ./ -type f -name "*.php" -o -name "*.html" -printf '%P\n' |xargs tar -I 'pigz -9' -cf target.tgz

用于多核或仅用于一个核:

find ./ -type f -name "*.php" -o -name "*.html" -printf '%P\n' |xargs tar -czf target.tgz

答案 6 :(得分:-1)

tar -cf my_archive `find ./ | grep '.php\|.html'`

使用“find”和“grep”获取所有目录及其子目录中.php和.html文件的所有路径。 然后将这些路径信息传递给tar进行压缩。

请注意那些符号`和'。另请注意,这将达到shell在命令行中允许的字符数限制,与其他一些答案不同。