Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 错误:";grep:参数列表太长”;_Linux_Bash_Unix_Grep_Find - Fatal编程技术网

Linux 错误:";grep:参数列表太长”;

Linux 错误:";grep:参数列表太长”;,linux,bash,unix,grep,find,Linux,Bash,Unix,Grep,Find,我正在尝试运行以下命令,但获取的参数太长。你能帮忙吗 HOST# grep -rl 'pattern' /home/*/public_html/* -bash: /bin/grep: Argument list too long 是否有方法覆盖此错误并在所有用户的公共html目录中grep我想要的模式匹配文件。同一台服务器上大约有500多名用户。使用find find /home/*/public_html -type f -exec grep -l 'pattern' {} + +修饰符将

我正在尝试运行以下命令,但获取的参数太长。你能帮忙吗

HOST# grep -rl 'pattern' /home/*/public_html/*
-bash: /bin/grep: Argument list too long
是否有方法覆盖此错误并在所有用户的公共html目录中grep我想要的模式匹配文件。同一台服务器上大约有500多名用户。

使用
find

find /home/*/public_html -type f -exec grep -l 'pattern' {} +
+
修饰符将文件名分组到可管理的块中

但是,您可以使用
grep-r
来完成。参数应该是目录名,而不是文件名

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

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

用于将其分解为可管理的块。@PaulR你能用它代替提示吗?这将非常有用。上一条评论中的链接将带你进入
xargs
的手册页。请注意,您的问题与堆栈溢出无关,因为它不是一个编程问题-try或Related:这对我有用:对。当GNU的人给grep一个递归查找文件的参数时,他们真的把grep搞砸了。为什么不给它一个选项来对输出进行排序呢?查找文件的UNIX命令名为
find
,全局搜索文件中的正则表达式并打印结果的命令名为
grep
。始终使用正确的工具来完成上述工作。我知道您来自@EdMorton,但这就像编程语言中的语法糖。有时候这不是最好的方法,但我倾向于欣赏一个工具能帮我更快、更容易地完成任务。@EdMorton我想你会发现很多GNU工具都有方便的选项来代替常用的组合。它与-z选项类似于
tar
,因为通过管道将输入/输出传输到
gzip
。或者像
zless
这样的工具,它们结合了
less
zcat
,以及添加到
less
中的选项使其工作。不仅GNU工具-
sort
不需要
-u
选项,因为您可以执行
排序| uniq
。尽管如此,我能想到的所有方便的选项,像那样和你提到的那些,都与工具的意图是一样的(例如,唯一地排序,用gzip文件而不是普通文件),同时给grep一个在我的目录结构中爬行的选项与工具的意图没有任何关系。为什么不给
cat
sort
sed
,以及其他类似的工具一个递归查找文件的选项呢?这和让grep做这件事一样有意义。“这简直是个坏主意。@EdMorton,因为在文件夹中搜索内容比打印或排序文件夹中的所有文件要常见得多。”。顺便说一句,
sort-u
的原因不仅仅是方便,而是效率;排序是O(n logn),因此如果在排序之前过滤掉重复项,可以显著缩短排序时间。
grep -rl 'pattern' /home/*/public_html