如何在其文件内容中找到包含特定文本字符串的所有文件?
以下不起作用。它似乎显示系统中的每个文件。
find / -type f -exec grep -H 'text-to-find-here' {} \;
执行以下操作:
grep -rnw '/path/to/somewhere/' -e 'pattern'
-r
或-R
是递归的,-n
是行号,而-w
代表匹配整个单词。-l
(小写L)可以添加以仅给出匹配文件的文件名。-e
是搜索过程中使用的模式除此之外,--不包括
、--include
、--不包括目录
标志可用于高效搜索:
>
这只会搜索那些扩展名为. c或.h的文件:
grep --include=\*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"
这将排除搜索所有以. o扩展名结尾的文件:
grep --exclude=\*.o -rnw '/path/to/somewhere/' -e "pattern"
对于目录,可以使用--exout-dir
参数排除一个或多个目录。例如,这将排除dirsdy1/
、dy2/
以及所有与*. dst/
匹配的目录:
grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/search/' -e "pattern"
这对我来说非常有效,可以达到和你一样的目的。
有关更多选项,请参阅man grep
。
使用grep-ilR
:
grep -Ril "text-to-find-here" /
i
代表忽略大小写(在您的情况下可选)。R
代表递归。l
代表“显示文件名,而不是结果本身”。/
代表从机器的根目录开始。
你可以使用ack。它就像源代码的grep。您可以使用它扫描整个文件系统。
只是做:
ack 'text-to-find-here'
在您的根目录中。
您还可以使用正则表达式、指定文件类型等。
更新
我刚刚发现了The Silver Searcher,它类似于ack,但比它快3-5倍,甚至忽略了. gitignore
文件中的模式。