返回
如何递归 tar 指定类型的文件?
Linux
2024-03-06 09:19:12
递归 tar 指定文件类型
问题
如何递归地 tar 指定类型的文件?仅仅使用 tar
命令只能 tar 所有文件,而使用 tar *.php *.html
则会忽略子目录。
解决方法
可以使用 find
命令和 tar
命令结合来递归地 tar 指定类型的文件。
find
命令可以搜索目录树,并根据指定的条件查找文件。以下命令将查找当前目录及其所有子目录中的所有 .php
和 .html
文件:
find . -type f \( -name '*.php' -o -name '*.html' \) -print0
该命令的输出将包含以空字符分隔的文件路径列表。
然后,可以使用 tar
命令将这些文件 tar 到存档中:
tar -cf my_archive.tar --null -T -
--null
选项告诉 tar
命令期望使用空字符作为文件列表的分隔符,而 -T -
选项告诉 tar
命令从标准输入读取文件列表。
将这两个命令结合起来,我们得到:
find . -type f \( -name '*.php' -o -name '*.html' \) -print0 | tar -cf my_archive.tar --null -T -
示例
假设有一个目录结构如下:
/my_directory
/subdir1
file1.php
file2.html
/subdir2
file3.php
file4.html
要 tar subdir1
和 subdir2
中的所有 .php
和 .html
文件,请运行以下命令:
find /my_directory -type f \( -name '*.php' -o -name '*.html' \) -print0 | tar -cf my_archive.tar --null -T -
该命令将创建 my_archive.tar
,其中包含以下文件:
/my_directory/subdir1/file1.php
/my_directory/subdir1/file2.html
/my_directory/subdir2/file3.php
/my_directory/subdir2/file4.html
常见问题解答
-
Q:我可以使用其他命令来查找文件吗?
- A:是的,你可以使用其他命令,如
locate
和grep
。然而,find
命令是最灵活和强大的命令,因为它允许你指定更复杂的搜索条件。
- A:是的,你可以使用其他命令,如
-
Q:我可以使用通配符来匹配文件名吗?
- A:是的,你可以使用通配符,如
*
、?
和[]
。但是,请注意,通配符可能会导致性能问题,因此最好避免使用通配符。
- A:是的,你可以使用通配符,如
-
Q:我可以使用正则表达式来匹配文件名吗?
- A:是的,你可以使用
-regex
选项来使用正则表达式匹配文件名。这比使用通配符更灵活,但性能也更低。
- A:是的,你可以使用
-
Q:我可以使用
tar
命令排除某些文件吗?- A:是的,你可以使用
--exclude
选项来排除某些文件。例如,要排除所有.txt
文件,请使用以下命令:
- A:是的,你可以使用
find . -type f \( -name '*.php' -o -name '*.html' \) -print0 | tar -cf my_archive.tar --null -T - --exclude='*.txt'
- Q:我可以使用
tar
命令压缩存档吗?- A:是的,你可以使用
-z
选项来压缩存档。例如,要使用 gzip 压缩存档,请使用以下命令:
- A:是的,你可以使用
find . -type f \( -name '*.php' -o -name '*.html' \) -print0 | tar -cfz my_archive.tar.gz --null -T -