如何递归地grep所有目录和子目录?
find . | xargs grep "texthere" *
如何递归地grep所有目录和子目录?
find . | xargs grep "texthere" *
当前回答
如果您知道所需文件的扩展名或模式,另一种方法是使用--include选项:
grep -r --include "*.txt" texthere .
您还可以使用--exclude提及要排除的文件。
Ag
如果您经常搜索代码,Ag(银搜索器)是grep的一个更快的替代方案,它是为搜索代码而定制的。例如,默认情况下,它是递归的,并自动忽略.gitignore中列出的文件和目录,因此您不必一直向grep或find传递同样繁琐的排除选项。
其他回答
我现在总是使用(即使在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;
...
只是为了好玩,如果@christangrant的答案太多而无法输入,可以快速搜索*.txt文件:-)
grep-r文本此处|grep.txt文件
在POSIX系统中,找不到grep的-r参数和grep-rn“东西”。不会运行,但如果使用find命令,它将:
查找-键入f-exec grep-n“stuff”{}\-打印
Solaris和HP-UX同意。
如果您知道所需文件的扩展名或模式,另一种方法是使用--include选项:
grep -r --include "*.txt" texthere .
您还可以使用--exclude提及要排除的文件。
Ag
如果您经常搜索代码,Ag(银搜索器)是grep的一个更快的替代方案,它是为搜索代码而定制的。例如,默认情况下,它是递归的,并自动忽略.gitignore中列出的文件和目录,因此您不必一直向grep或find传递同样繁琐的排除选项。
也:
find ./ -type f -print0 | xargs -0 grep "foo"
但grep-r是更好的答案。