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

find . | xargs grep "texthere" *

当前回答

只是为了好玩,如果@christangrant的答案太多而无法输入,可以快速搜索*.txt文件:-)

grep-r文本此处|grep.txt文件

其他回答

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

对于UNIX命令是:

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

对于Linux,命令是:

grep -r "string to be searched" .

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

find . | xargs grep "searched-string"

对于Linux:

grep -r "searched-string" .

在UNIX服务器上查找文件

find . -type f -name file_name

在LINUX服务器上查找文件

find . -name file_name

也:

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

但grep-r是更好的答案。

我想这就是你想写的

grep myText $(find .)

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

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

我现在总是使用(即使在Windows上使用GoW-Gnu):

grep --include="*.xxx" -nRHI "my Text to grep" *

(正如kronen在评论中指出的,您可以添加2>/dev/null以使拒绝权限的输出无效)

其中包括以下选项:

--include=PATTERN

仅在目录中重复搜索与PATTERN匹配的文件。

-n, --line-number

在输出的每一行前面加上输入文件中的行号。

(注意:phuclv在注释中补充道,-n会大大降低性能,因此您可能希望跳过该选项)

-R, -r, --recursive

递归地读取每个目录下的所有文件;这相当于-d递归选项。

-H, --with-filename

打印每个匹配项的文件名。

-I     

处理二进制文件,就像它不包含匹配的数据一样;这相当于--binary files=不匹配选项。

如果我想要不区分大小写的结果,我可以添加“I”(-nRHIi)。

我可以得到:

/home/vonc/gitpoc/passenger/gitlist/github #grep --include="*.php" -nRHI "hidden" *
src/GitList/Application.php:43:            'git.hidden'      => $config->get('git', 'hidden') ? $config->get('git', 'hidden') : array(),
src/GitList/Provider/GitServiceProvider.php:21:            $options['hidden'] = $app['git.hidden'];
tests/InterfaceTest.php:32:        $options['hidden'] = array(self::$tmpdir . '/hiddenrepo');
vendor/klaussilveira/gitter/lib/Gitter/Client.php:20:    protected $hidden;
vendor/klaussilveira/gitter/lib/Gitter/Client.php:170:     * Get hidden repository list
vendor/klaussilveira/gitter/lib/Gitter/Client.php:176:        return $this->hidden;
...