协慌网

登录 贡献 社区

我如何递归 grep?

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

find . | xargs grep "texthere" *

答案

grep -r "texthere" .

第一个参数表示要搜索的正则表达式,而第二个参数表示应搜索的目录。在这种情况下, .表示当前目录。

注意:这适用于 GNU grep,在某些平台(如 Solaris)上,您必须专门使用 GNU grep 而不是遗留实现。对于 Solaris,这是ggrep命令。

如果你知道你想要的文件的扩展名或模式,另一种方法是使用--include选项:

grep -r --include "*.txt" texthere .

您还可以提及要使用--exclude排除的文件。

如果你经常搜索代码, Ag(The Silver Searcher)是一个比 grep 更快的替代品,它是为搜索代码而定制的。例如,默认情况下它是递归的,并自动忽略.gitignore列出的文件和目录,因此您不必继续将相同的繁琐排除选项传递给 grep 或 find。

也:

find ./ -type f -print0 | xargs -0 grep "foo"

grep -r是一个更好的答案。