我试图运行以下命令,但遇到了“参数过长”错误。你能帮忙吗?
HOST# grep -rl 'pattern' /home/*/public_html/*
-bash: /bin/grep: Argument list too long
是否有一种方法可以覆盖此错误并在所有用户public_html目录中搜索我想要的匹配文件。 同一服务器上大约有500多个用户。
使用find
方法
find /home/*/public_html -type f -exec grep -l 'pattern' {} +
+
修饰符能够将文件名分组为可管理的块。
然而,您可以使用grep -r
来完成此操作。参数应该是目录名,而不是文件名。
grep -rl 'pattern' /home/*/public_html
这只会有500多个参数,而不是成千上万的文件名。
tar
的-z选项一样,因为将输入/输出导管到gzip
是如此常见。或者像zless
这样的工具,它结合了less
和zcat
,以及添加到less
中使其工作的选项。 - Barmarsort
不需要 -u
选项,因为你可以使用 sort | uniq
来实现。我能想到的所有方便选项,比如你提到的那些,都与该工具的意图相同(例如唯一排序,对一个压缩文件进行合并),而给 grep
一个选项来穿越我的目录结构根本与工具的意图无关。为什么不给 cat
、sort
、sed
和其他类似的工具一个递归查找文件的选项呢?这样做和让 grep
进行递归查找一样没有任何意义。这只是一个坏主意。 - Ed Mortonsort -u
的原因不仅仅是方便,而且是高效的;排序的时间复杂度是 O(n log n),因此如果在排序之前过滤掉重复项,可以显著减少排序时间。 - Barmar
xargs
的手册页。请注意,您的问题不适合在Stack Overflow上提问,因为它不是一个编程问题 - 请尝试http://superuser.com或http://unix.stackexchange.com。 - Paul R