如何在ack和grep中进行最大深度搜索?


Answers:


22

使用-nno-recurse

$ ack -n foo

grep是默认情况下不是递归的,并且-r仅当需要递归搜索时才应使用该标志。

您可以使用以下方法搜索当前目录grep

$ grep -- foo *

13
不回答问题吗?(如果我想递归到2的深度,该怎么办)
Steven Lu

好点,我错过了。有什么建议么?
埃里克·威尔逊

29

您可以将-exec参数与find结合使用。例:

find . -maxdepth 1 -exec grep foo {} \;

这可以缩放,即 -maxdepth 2


史蒂芬(Stephane),我的答案(-maxdepth 1)可扩展。例如-maxdepth 2。我不知道该如何描述您所做的编辑。
David Wilkins 2014年

如果不使用@,它将不会到达@stephane。
Braiam

4
是的,很抱歉,我同意我的编辑过于介入。您可能仍要澄清(-maxdepth)不是可移植/标准语法(仅GNU和某些BSD)。另外,这里没有意义\;grep每个文件运行一个)。使用grep -H foo {} +(特定于GNU)或grep foo /dev/null {} +(标准)确保始终打印文件名。等效的标准-maxdepth 2find . -path './*/*' -type d -prune -o -type f -exec ...
史蒂芬·夏泽拉斯

2
另请注意,您的目录将给出错误消息(包括.您不提供-mindepth 1),而GNU grep不会尝试读取目录-r(它会在目录上递归)。您可能希望将添加-d skipgrep(假定GNU的grep)或更好的添加! -type dfind,甚至更好-type f(或-xtype f假设GNU find),你可能不想grep读非正规文件。
斯特凡Chazelas

4
我倾向于使用grep -Hin这种方法,以便可以看到文件名和出现该行的行。
GDP2 2016年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.