Bash参数的最大数量!=最多cp个参数?
我最近一直在复制和移动大量文件(约40万个)。我知道在Bash命令行上可以扩展的参数数量有限制,因此我一直在使用xargs来限制产生的数量。
出于好奇,我想知道我可以使用的最大参数数目是多少,我发现这篇文章说它是依赖于系统的,我可以运行以下命令来找出:
$ getconf ARG_MAX
令我惊讶的是,我回来的答案是:
2621440
刚刚超过
。正如我所说,我要处理的文件数量要少得多,大约为40万。我绝对需要使用xargs
移动和复制这些文件的方法,因为我尝试使用普通mv * ...
或cp
* ...出现“参数列表过长”错误。
因此,mv
and cp
命令对我可以使用的参数数量有固定的限制(我在他们的手册页中找不到任何内容),还是我错过了什么?
回答:
正如Ignacio所说,ARG_MAX
是传递给的参数 缓冲区
的最大长度exec()
,而不是文件的最大数量(此页面有非常深入的说明)。具体来说,它列出fs/exec.c
了以下条件:
PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *) / sizeof(void *)
而且,您似乎还有一些其他限制:
在32位Linux上,这是 。这将成为相关如果参数的平均长度小于4.由于Linux
2.6.23,该功能检查,如果数量超过
MAX_ARG_STRINGS
在<linux/binfmts.h>
(2 ^ 32-1 =4294967296-1)。作为附加限制,一个参数不得超过
MAX_ARG_STRLEN
(131072)。
以上是 Bash参数的最大数量!=最多cp个参数? 的全部内容, 来源链接: utcz.com/qa/419414.html