web-dev-qa-db-ja.com

再帰的なgrep:特定のディレクトリを除外する

特定の内容のソースファイルを見つけるために、再帰的なgrepを頻繁に使用しています。

grep -Rni "myfunc" .

大規模なコードベースでは、これが遅くなる可能性があるため、-incldueを使用して拡張機能を制限/ホワイトリスト化します。

grep -Rni --include=*.Java "myfunc" .

ただし、サブディレクトリ全体を(プルーン)除外する方が効率的だと思います。

grep -Rni --exclude=/.svn/ "myfunc" .

ただし、-excludeは上記の* .Javaのようなファイルパターンのみをサポートします。ディレクトリを除外するにはどうすればよいですか?

50
gabor

ack を調べてみてください。

私はそれを使い始めたばかりですが、これには非常に適しているようです。

10
Alex Feinman
grep -r --exclude-dir=dev --exclude-dir=sys --exclude-dir=proc PATTERN data

ソース: https://stackoverflow.com/questions/2799246/grep- exclude-a-specific-folder-using

63
Henrik

代わりにfindを使用できます。

find . -not -path "*/.svn*" -not -type d -exec grep -ni "myfunc" {} \; -print

OK、少し逆です。最初にgrepの結果を取得し、thenパスを取得します。多分他の誰かがより良い答えを持っていますか?

6
Josh

検索する-Pruneオプションもあります。

 find . -path "*/.svn*" -Prune -o -not -type d -exec grep -ni "myfunc" {} \; -print
0
misiu_mp

あなたはこれを試すことができます:

grep -R  "myfunc" . | grep -v path_to_exclude/

例:ログファイルのコンテンツを検索したくない場合は、次のようにします。

grep -R "myfunc" . | grep -v log/
0
Akshatha