压缩数千个文件时如何避免“参数列表太长”错误?

压缩数千个文件时如何避免“参数列表太长”错误?

我在 RHEL7 Linux 服务器上的文件夹中有 200,000 个 XML 文件。我需要压缩所有 200,000 个 XML 文件。我正在使用 Tar 命令,但收到错误“参数列表太长”,还有其他方法吗?在这 200,000 个文件中,只需要压缩 10,000 个

tar -cvf xml.tar *.xml

所有 xml 文件都需要作为单独的档案单独存档,并且档案名称中包含原始文件名。

原始文件:

1.xml
2.xml
...
n.xml

OP 想要的归档结果:

1.xml.tgz
2.xml.tgz
...
n.xml.tgz

答案1

您超出了最大命令行长度。命令行的长度是有限的,您可以使用getconf ARG_MAX命令进行测试。当您运行包含 glob 模式的 shell 命令时(例如*在包含大量文件的目录中),命令行会溢出,并且会收到错误消息“参数列表太长”,所以这不是问题tar。当您使用其他带有应用于大量文件的 glob 模式的命令时,请记住这一点。

为了解决您的问题,您可以使用find“遍历”
目录并提供的程序tar

要将所有文件存档为单个压缩的 tar 存档,您可以使用:

find . -name "*.xml" -print | tar -czvf xml.tgz -T -

将所有文件单独归档为压缩的 tar 档案(不太清楚如果是单个文件为什么需要 tar,但如你所愿), 使用

find . -name "*.xml" -exec tar -czvf '{}'.tgz '{}' \;

要将所有文件单独存档为 gzip 存档,请使用:

find . -name "*.xml" -exec gzip '{}' \;

请注意,上述命令将删除原始文件(!!!)

要将所有文件单独存档为 zip 存档,请使用:

find . -name "*.xml" -exec zip '{}'.zip '{}' \;

PS 我还添加了错过的(?)选项来压缩 tar 存档。

相关内容