特定の内容のソースファイルを見つけるために、再帰的なgrepを頻繁に使用しています。
grep -Rni "myfunc" .
大規模なコードベースでは、これが遅くなる可能性があるため、-incldueを使用して拡張機能を制限/ホワイトリスト化します。
grep -Rni --include=*.Java "myfunc" .
ただし、サブディレクトリ全体を(プルーン)除外する方が効率的だと思います。
grep -Rni --exclude=/.svn/ "myfunc" .
ただし、-excludeは上記の* .Javaのようなファイルパターンのみをサポートします。ディレクトリを除外するにはどうすればよいですか?
ack を調べてみてください。
私はそれを使い始めたばかりですが、これには非常に適しているようです。
grep -r --exclude-dir=dev --exclude-dir=sys --exclude-dir=proc PATTERN data
ソース: https://stackoverflow.com/questions/2799246/grep- exclude-a-specific-folder-using
代わりにfindを使用できます。
find . -not -path "*/.svn*" -not -type d -exec grep -ni "myfunc" {} \; -print
OK、少し逆です。最初にgrepの結果を取得し、thenパスを取得します。多分他の誰かがより良い答えを持っていますか?
検索する-Pruneオプションもあります。
find . -path "*/.svn*" -Prune -o -not -type d -exec grep -ni "myfunc" {} \; -print
あなたはこれを試すことができます:
grep -R "myfunc" . | grep -v path_to_exclude/
例:ログファイルのコンテンツを検索したくない場合は、次のようにします。
grep -R "myfunc" . | grep -v log/