bash - Bash arguments=最大num数的最大数量? !

  显示原文与译文双语对照的内容
0 0

我最近被复制和移动大量文件( ~400 ,000 ) 。 我知道上有限制的参数个数可以展开在bash命令行上,所以我一直使用xargs来限制生成的数字。

出于好奇,我想知道参数的最大数量,我使用was,我找不到这篇文章油烟,必须购买,并且我可以运行该命令查找:

$ getconf ARG_MAX

令我吃惊的是,anwser我回来是:

2621440

就在 2 .6万 。 正如我所说,我操作的文件的数目远远小于此400k左右。 我绝对需要使用 xargs方法移动和复制这些文件,因为我试着使用正常 mv * ...cp * ...并收到'Argumentlist过长'错误。

所以,则执行 mvcp命令有自己的固定数目的极限参数就能使用( I,找不到任何在其手册页),还是我说错什么了?

时间: 原作者:

0 0

正如Ignacio所说: ARG_MAX被传递的参数在 缓冲区的最大长度为 exec()而不是这个页面文件的最大数量( 有很深入的解释) 。 具体来说,它列出了 fs/exec.c为检查下列条件:

PAGE_SIZE*MAX_ARG_PAGES-sizeof(void *) / sizeof(void *)

而且,看来,有一些额外的限制:

在32位上Linux,这是 ARGMAX/4 1 ( 32767 ) 。 该参数才有意义的平均长度,如果小于4 。 因为Linux 2 .6 .23此函数检验,如果数目超过 MAX_ARG_STRINGS<linux/binfmts.h>( 2^32 1 = 4294967296 1 ) 。 并且某个参数作为附加限制,不能超过 MAX_ARG_STRLEN( 131072 ) 。

0 0

ARG_MAX是的最大长度的参数。 exec(3)功能。 shell不需要支持( robert从其命令行参数的长度。

...