如何在所有子目录中打开某些文件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" )
这个方法有一些注意事项:
- 它会失败,如果有任何文件或目录中有空格,和
- 如果文件太多,最大命令行长度已满,则会失败。
解决这些问题的办法可能是将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个字符的限制。