2015-04-19 202 views
4

我试图运行以下命令,但获取参数太长的错误。你能帮我吗?。错误:“grep:参数列表太长”

HOST# grep -rl 'pattern' /home/*/public_html/* 
-bash: /bin/grep: Argument list too long 

有没有办法覆盖这个错误,并grep模式匹配文件,我想在所有用户public_html目录。同一台服务器中有大约500多个用户。

+0

使用[xargs](http://linux.die.net/man/1/xargs)将其分解为可管理的块。 –

+0

@PaulR你可以精心设计而不是提示吗?这真的很有帮助。 – John

+0

以前评论中的链接将带您进入'xargs'手册页。请注意,您的问题是Stack Overflow的主题,因为它不是一个编程问题 - 请尝试http://superuser.com或http://unix.stackexchange.com。 –

回答

18

使用find

find /home/*/public_html -type f -exec grep -l 'pattern' {} + 

+修饰使得组管理的块的文件名。

但是,您可以使用grep -r。这个参数应该是目录名称,而不是文件名。

grep -rl 'pattern' /home/*/public_html 

这将只有500多个参数,而不是数千个文件名。

+1

没错。当GNU的人给它一个递归查找文件的参数时,他们真的搞砸了grep。为什么不给它一个选项来排序输出呢?用于** find **文件的UNIX命令被命名为'find',并命令** g **在文件中搜索文件中的** r ** eg ** ** e ** xpression和** p ** rint结果被命名为'grep'。如上所示,始终只使用正确的工具进行工作。 –

+1

我明白你来自@EdMorton,但它就像编程语言中的语法糖。有时候这不是最佳的方式,但是我倾向于欣赏一种工具何时能够让他们更快更轻松地完成工作。 –

+1

@EdMorton我想你会发现很多GNU工具都有便利选项来替代常见的组合。这就像'tar'的-z选项,因为输入/输出到'gzip'很常见。或者像'zless'这样的结合'less'和'zcat'的工具,以及添加到'less'的选项以使其工作。 – Barmar