find、xargs 和 grep 组合会引发错误

find、xargs 和 grep 组合会引发错误

抛出错误的命令:

$ find /mydir/tmp/*20151014* -print | xargs grep -l 'filesTransmitted=1'
bash: /usr/bin/find: The parameter or environment lists are too long.

是否有执行相同操作的最佳命令?

答案1

这是文件(目录?)名称的扩展,/mydir/tmp/*20151014*这就是这里的问题。

请尝试这样做,这样您的 shell 就不需要将通配符名称展开到列表中:

find /mydir/tmp -name '*20151014*' -exec grep -l 'filesTransmitted=1' {} \;

它与你的略有不同,因为你的搜索文件或目录中的所有文件,从匹配到开始,而我的搜索名称与 下任何位置/mydir/tmp/*20151014*匹配的所有文件。如果这不能满足您的要求,请提供*20151014*/mydir/tmp样本文件及其目录路径的集合。

答案2

也许你的论点列表太长了。检查此页面:
http://www.cyberciti.biz/faq/argument-list-too-long-error-solution

getconf ARG_MAX将为您提供参数允许的最大大小。

尝试更改最大堆栈值,ulimit -s显示当前值并ulimit -s (value)更改它。您也可以使用ulimit -s unlimited.

阅读所有这些文章,似乎在 Linux 内核 2.6.32 之后,ARG_MAX 的值是动态分配的,并且它基于 ulimit -s 值。

相关内容