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

find . | xargs grep "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和激进的文字优化,使搜索速度非常快。查看此处的详细分析。

其他回答

要查找路径递归包含特定字符串的文件名,请使用以下命令对于UNIX:

find . | xargs grep "searched-string"

对于Linux:

grep -r "searched-string" .

在UNIX服务器上查找文件

find . -type f -name file_name

在LINUX服务器上查找文件

find . -name file_name

只有文件名也很有用

grep -r -l "foo" .

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

对于UNIX命令是:

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

对于Linux,命令是:

grep -r "string to be searched" .

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。

我想这就是你想写的

grep myText $(find .)

如果你想找到grep命中的文件,这可能是其他有用的东西

grep myText $(find .) | cut -d : -f 1 | sort | uniq