以递归方式查找给定目录中的文本

使用 GNU grep

grep -r 'pattern' <directory path>

要列出匹配的行号,请使用 -n 选项

grep -rn 'pattern' <directory path>

仅搜索具有特定 glob 模式的文件

grep --include='*.txt' -r 'pattern' <directory path>

排除文件模式或目录

grep -R --exclude=*.log 'pattern' <directory path>
grep -R --exclude={*.log,*.class} 'pattern' <directory path>

grep -R --exclude-dir=tmp 'pattern' <directory path>
grep -R --exclude-dir={tmp,lib} 'pattern' <directory path>

备注和其他有用的选项

  • 如果在当前目录中搜索,则可以跳过 <directory path>
  • -R 选项遵循所有符号链接,不像 -r 只有在命令行上时才跟随符号链接
  • -l 只列出匹配的文件
  • -h 抑制文件名前缀
  • --color=auto 突出匹配的模式
  • -m <num> 指定每个文件输入的最大匹配数

POSIX 解决方法以递归方式搜索

find <directory path> -type f -exec grep -l 'pattern' {} +
  • 可以根据需要使用 -n-l 等选项
  • 如果不支持 {} +,请改用 {} \;
  • 有关 find 命令的更多帮助,请参阅查找文档,例如如何包含/排除文件类型,目录等