tar 中可以传递的文件名数量是否有限制

tar 中可以传递的文件名数量是否有限制

我正在创建一个 tar 并使用以下命令在其他位置解压它:

$ tar -C sourcedir -cf - . | tar -C targetdir -xpf -

但它失败了,就像
我得到的错误是:Argument list too long - tar,当我减少文件数量时,我的意思是批量处理文件(例如一次 1000 个文件),它可以工作。
我注意到的另一点是:
如果文件名比它短,它就可以正常工作。

我不确定到底是什么限制了它?请给出建议。

答案1

参数列表太长不是特定于 的错误。它是的tar错误( )E2BIG执行(2)系统调用(由内核提供,内核必须施加一些限制execve以避免损坏内存)。因此,您的 shell(-sfork然后execve-s/bin/tar程序)会告诉您该错误消息。

增加该限制可能比较困难(可能有些困难sysconf,我忘记了细节)。或者重新编译内核并增加ARG_MAX其中的include/uapi/linux/limits.h

GNU焦油(1)接受许多有趣的选项(因此请阅读手册页),特别是:

-T, --files-from=文件

         Get names to extract or create from FILE.

因此,收集要存档在某些(例如临时)文件中的文件路径,然后传递它,-T这样就不会受到任何限制。

但是,该tar命令具有许多有趣的功能,您可以使用它们来获得合理大小的命令。

也可以看看查找(1)xargs(1). 还请考虑達爾或者阿菲奥(作为 的替代tar)或同步

你可能使用 GNUcp(1)作为cp -va sourcedir destdir

相关内容