我正在创建一个 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