2009-07-10, 10:26 | #1 (permalink) |
普通会员
注册日期: 2009-07-01
帖子: 68
|
一个shell问题
遇到这样一个实际问题,一个目录下有10000个文件,如果我从中查找包含 pattern的字符串,直接使用 grep "pattern" * 会报参数太长不能执行;而使用 ls | xargs grep "pattern" 则没有问题。
事实上"参数太长不能执行"这是由shell(bash环境) 报出来的,而非grep命令。 我在 rhel5 上(bash版本 3.1.17) 验证最多参数长度是 23534个。 在 fc 9 上 (bash版本 3.2.33) 最多参数长度在 39万到40万之间。 xargs 把这些参数直接交给了调用的程序,而不再通过bash。当超出bash 限定的最大参数时,也不再检查。 至于能否接受这么多的参数,就看命令本身怎么实现了, grep pattern files[] 按我的理解(也是主观臆测) files[] 的长度应该是一个int类型的最大长度/2(排除负数)。即2^30个。 |