我如何在Linux上查找包含特定文本的所有文件?
我试图找到一种方法来扫描我的整个Linux系统中包含特定字符串文本的所有文件。 为了澄清,我正在寻找文件内的文本,而不是文件名。
当我正在查找如何做到这一点时,我遇到了这个解决方案两次:
find / -type f -exec grep -H 'text-to-find-here' {} ;
但是,它不起作用。 它似乎显示系统中的每个文件。
这是否接近正确的做法? 如果不是,我该怎么办? 这种在文件中查找文本字符串的功能对于我正在进行的一些编程项目来说非常有用。
请执行下列操作:
grep -rnw '/path/to/somewhere/' -e 'pattern'
-r
或-R
是递归的, -n
是行号,和 -w
表示匹配整个单词。 -l
(小写字母L)可以添加到只给出匹配文件的文件名。 除此之外,-- --exclude
,-- --include
,-- --exclude-dir
标志可用于高效搜索:
这只会搜索那些具有.c或.h扩展名的文件:
grep --include=*.{c,h} -rnw '/path/to/somewhere/' -e "pattern"
这将排除搜索所有以.o扩展名结尾的文件:
grep --exclude=*.o -rnw '/path/to/somewhere/' -e "pattern"
对于目录,可以通过--exclude-dir
参数排除特定的目录。 例如,这将排除目录dir1 /,dir2 /,并且它们全部匹配* .dst /:
grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern"
这对我来说很好,可以达到和你一样的目的。
要获得更多选项,请选中man grep
。
你可以使用grep -ilR
:
grep -Ril "text-to-find-here" /
i
代表忽略大小写(在你的情况下是可选的)。 R
代表递归。 l
代表“显示文件名,而不是结果本身”。 /
表示从您的机器的根目录开始。 你可以使用ack。 这就像源代码的grep。 您可以使用它扫描整个文件系统。
做就是了:
ack 'text-to-find-here'
在你的根目录下。
您还可以使用正则表达式,指定文件类型等。
UPDATE
我刚刚发现了The Silver Searcher,它就像ack一样,但速度比它快3-5倍,甚至忽略了.gitignore
文件中的模式。
上一篇: How do I find all files containing specific text on Linux?