一尘不染

如何在Linux上查找所有包含特定文本的文件?

linux

想要改善这篇文章吗? 提供此问题的详细答案,包括引文和为什么答案正确的解释。答案不够详细的答案可能会被编辑或删除。

我试图找到一种方法来扫描我的整个Linux系统,以查找包含特定文本字符串的所有文件。只是为了澄清,我正在文件中寻找文本,而不是在文件名中寻找文本。

当我查找如何执行此操作时,我两次遇到此解决方案:

find / -type f -exec grep -H 'text-to-find-here' {} \;

但是,它不起作用。似乎显示了系统中的每个文件。

这接近正确的方法吗?如果没有,我应该怎么办?这种在文件中查找文本字符串的功能对于我正在做的某些编程项目非常有用。


阅读 518

收藏
2020-06-02

共1个答案

一尘不染

请执行下列操作:

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参数排除特定目录。例如,这将排除dirs dir1 /,dir2 /及其全部与* .dst /匹配的目录:

    grep --exclude-dir={dir1,dir2,*.dst} -rnw '/path/to/somewhere/' -e "pattern"
    

这对我来说非常有效,可以达到与您几乎相同的目的。

有关更多选项,请检查man grep

2020-06-02