以遞迴方式查詢給定目錄中的文字

使用 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 命令的更多幫助,請參閱查詢文件,例如如何包含/排除檔案型別,目錄等