如何在所有子目录中打开某些文件types?

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

tar -cf my_archive *

它所有的文件,我不想要的。 如果我使用

tar -cf my_archive *.php *.html

它忽略子目录。 我怎样才能让它recursion焦油,但只包括两种types的文件?

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

一种方法是:

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

这个方法有一些注意事项:

  1. 它会失败,如果有任何文件或目录中有空格,和
  2. 如果文件太多,最大命令行长度已满,则会失败。

解决这些问题的办法可能是将find命令的内容输出到文件中,然后使用“-T,–files-from FILE”选项来tar。

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

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

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

这将处理与空间的path:

 find ./ -type f -name "*.php" -o -name "*.html" -exec tar uvf myarchives.tar {} + 
 tar -cf my_archive `find ./ | grep '.php\|.html'` 

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

请小心使用符号`和'。 还要注意的是,这不会像其他一些答案那样,达到shell命令行允许多less个字符的限制。