如何递归地grep所有目录和子目录?
find . | xargs grep "texthere" *
如何递归地grep所有目录和子目录?
find . | xargs grep "texthere" *
当前回答
这是在我当前的机器上(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”
其他回答
也:
find ./ -type f -print0 | xargs -0 grep "foo"
但grep-r是更好的答案。
只是为了好玩,如果@christangrant的答案太多而无法输入,可以快速搜索*.txt文件:-)
grep-r文本此处|grep.txt文件
grep -r "texthere" .
第一个参数表示要搜索的正则表达式,而第二个参数表示应该搜索的目录。在这种情况下。表示当前目录。
注意:这适用于GNUgrep,在某些平台(如Solaris)上,您必须特别使用GNUgrep而不是传统实现。对于Solaris,这是ggrep命令。
这应该是有效的:
grep -R "texthere" *
球状物**
使用grep-r是可行的,但可能会过度使用,尤其是在大型文件夹中。
对于更实际的用法,以下是使用globbing语法(**)的语法:
grep "texthere" **/*.txt
它只greps具有模式选择模式的特定文件。它适用于受支持的shell,如Bash+4或zsh。
要激活此功能,请运行:shopt-s globstar。
另请参阅:如何在Linux上查找包含特定文本的所有文件?
数字grep
对于Git版本控制下的项目,请使用:
git grep "pattern"
这要快得多。
里普雷普
对于较大的项目,最快的grepping工具是ripgrep,默认情况下递归地对文件进行grep:
rg "pattern" .
它建立在Rust的正则表达式引擎之上,该引擎使用有限自动机、SIMD和激进的文字优化,使搜索速度非常快。查看此处的详细分析。