我想tar和目录及其子目录中的所有.php和.html文件 . 如果我使用
tar -cf my_archive *
它会记录我不想要的所有文件 . 如果我使用
tar -cf my_archive *.php *.html
它忽略了子目录 . 我如何递归地使它tar,但只包括两种类型的文件?
tar -cf my_archive `find ./ | grep '.php\|.html'`
使用“find”和“grep”获取所有目录及其子目录中.php和.html文件的所有路径 . 然后将这些路径信息传递给tar进行压缩 .
请小心那些符号'和' . 另请注意,这将达到shell在命令行上允许的字符数限制,这与其他一些答案不同 .
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文件 .
这将处理带空格的路径:
find ./ -type f -name "*.php" -o -name "*.html" -exec tar uvf myarchives.tar {} +
把它们放在一个文件中
find . \( -name "*.php" -o -name "*.html" \) -print > files.txt
然后使用该文件作为tar的输入,使用-I或-T,具体取决于您使用的tar版本
使用h复制符号链接
tar cfh my.tar -I files.txt
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
7 回答
使用“find”和“grep”获取所有目录及其子目录中.php和.html文件的所有路径 . 然后将这些路径信息传递给tar进行压缩 .
请小心那些符号'和' . 另请注意,这将达到shell在命令行上允许的字符数限制,这与其他一些答案不同 .
find ./someDir -name "*.php" -o -name "*.html" | tar -cf my_archive -T -
一种方法是:
但是这个方法有一些注意事项:
如果有任何文件或目录中包含空格,则会失败
如果文件太多,则最大命令行长度已满,它将失败 .
解决这些问题的方法是将find命令的内容输出到文件中,然后使用“-T,--files-from FILE”选项来tar .
要压缩具有不同模式的多个文件,我们可以将它们与空格分开并将它们全部添加到gz文件中,如下所示:
这将添加从任何子目录以Alice开头的所有.yml文件,并从任何子目录添加以Bob开头的所有.json文件 .
这将处理带空格的路径:
把它们放在一个文件中
然后使用该文件作为tar的输入,使用-I或-T,具体取决于您使用的tar版本
使用h复制符号链接
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