我想将tar及其目录中的所有.php和.html文件及其子目录。如果我用
tar -cf my_archive *
它将所有文件焦油化,这是我不需要的。如果我用
tar -cf my_archive *.php *.html
它忽略子目录。如何递归使它成为tar但仅包含两种类型的文件?
Answers:
find ./someDir -name "*.php" -o -name "*.html" | tar -cf my_archive -T -
-o -name [pattern]
用于每种新条件
如果您使用的是bash
版本> 4.0,则可以利用它shopt -s globstar
来简化此工作:
shopt -s globstar; tar -czvf deploy.tar.gz **/Alice*.yml **/Bob*.json
这将从所有子目录中添加以Alice开头的所有.yml文件,并从任何子目录中添加以Bob开头的所有.json文件。
shopt -s globstar
选项,所以答案是正确的,并且实际上是最佳答案
一种方法是:
tar -cf my_archive.tar $( find -name "*.php" -or -name "*.html" )
但是,此方法有一些注意事项:
解决这些问题的方法是将find命令的内容输出到文件中,然后对tar使用“ -T,--files-from FILE”选项。
这将处理带有空格的路径:
find ./ -type f -name "*.php" -o -name "*.html" -exec tar uvf myarchives.tar {} +
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