抛出错误的命令:
$ 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 值。