如何递归地grep所有目录和子目录?

find . | xargs grep "texthere" *

当前回答

2018年,您希望使用ripgrep或白银搜索器,因为它们比其他搜索器快得多。

下面是一个包含336个一级子目录的目录:

% find . -maxdepth 1 -type d | wc -l
     336

% time rg -w aggs -g '*.py'
...
rg -w aggs -g '*.py'  1.24s user 2.23s system 283% cpu 1.222 total

% time ag -w aggs -G '.*py$'
...
ag -w aggs -G '.*py$'  2.71s user 1.55s system 116% cpu 3.651 total

% time find ./ -type f -name '*.py' | xargs grep -w aggs
...
find ./ -type f -name '*.py'  1.34s user 5.68s system 32% cpu 21.329 total
xargs grep -w aggs  6.65s user 0.49s system 32% cpu 22.164 total

在OSX上,这将安装rigrep:brew install rigrep。这将安装silver搜索器:brew install the _silver_searcher。

其他回答

这是在我当前的机器上(windows 7上的git bash)适用于我的案例的例子:

find ./ -type f -iname "*.cs" -print0 | xargs -0 grep "content pattern"

对于带有空格的路径,我总是忘记-print0和-0。

编辑:我的首选工具现在是ripgrep:https://github.com/BurntSushi/ripgrep/releases . 它真的很快,并且有更好的默认值(比如默认情况下的递归)。与我的原始答案相同的示例,但使用了ripgrep:rg-g“*.cs”“content pattern”

grep-r“texthere”。(通知期结束)

(^信用:https://stackoverflow.com/a/1987928/1438029)


澄清:

grep-r“texthere”/(递归地grep所有目录和子目录)

grep-r“texthere”。(递归地grep这些目录和子目录)

grep递归

grep[选项]模式[文件…][选项]-R、 -R,--递归递归地读取每个目录下的所有文件。这相当于-d recurse或--directories=recurse选项。http://linuxcommand.org/man_pages/grep1.html

grep帮助

$grep--帮助

$ grep --help |grep recursive
  -r, --recursive           like --directories=recurse
  -R, --dereference-recursive

选择

确认(http://beyondgrep.com/)

银(http://github.com/ggreer/the_silver_searcher)

下面是在Unix和Linux环境中递归搜索字符串的命令。

对于UNIX命令是:

find . -name "string to be searched" -exec grep "text" "{}" \;

对于Linux,命令是:

grep -r "string to be searched" .

这应该是有效的:

grep -R "texthere" *

只有文件名也很有用

grep -r -l "foo" .