linux zip 和 tar 所有具有特定扩展名的文件递归维护目录结构

linux zip 和 tar 所有具有特定扩展名的文件递归维护目录结构

与此类似问题和这个问题我想制作一个压缩的 tar 文件 (files.tar.gz),其中包含我的 webroot 及其所有子目录中的所有 php 文件,并保持文件夹结构。我的 webroot 名为“public_html”。

我还没有尝试任何东西,因为我不知道从哪里开始。我链接的第二个问题实际上非常接近我所寻找的内容,但如果我没看错的话,它会使每个找到的文件成为单独的 GZ。

实际上,tar 的整体特性对我来说比 gzip 的压缩更重要。我只想将此文件拉到我的 Windows 机器上,然后我就可以使用我习惯的工具搜索它。

答案1

find -iname '*.php' -print0 | xargs -0 tar -rf php_backup.tar

这使用了你链接到的第二个答案,但-c-r

来自 man tar:

-c      Create a new archive containing the specified items.
-r      Like -c, but new entries are appended to the archive.  Note that
        this only works on uncompressed archives stored in regular files.
        The -f option is required.

另一个选择是用 -exec 替换 -print0。我认为这会更有效,但如果您有数千或数万个文件,它可能会崩溃。

[编辑]

1) 仅当您的文件名中有不方便的分隔符时,才需要 xargs 后面的 -print0 和 -0。(读取带有空格的名称)。您可能不需要它们。

2) 我再次检查了该命令并进行了测试。find /public_www -name '*.php' -print | xargs 向 xargs 提供一行。因此,您链接的示例转换为类似 的内容xargs -0 tar -cf docs.tar *.php,并且也应该有效。

相关内容