回答:
次の--include
オプションを使用することをお勧めしますgrep
。
grep -lr --include='*.c' search-pattern .
.
が、コマンドの最後が何のためにあるのかについて私は混乱しています。
*.c
パターンはシェルによって評価されます。を使用する場合と同様に、現在のディレクトリに適用されますls *.c
。
代わりに、*.c
パターンに一致するすべてのファイルを(再帰的に)grep
検索し、その中から検索する必要があると思います。これを行う方法は次のとおりです。
find . -name "*.c" -print0 | xargs --null grep -l search-pattern
でxargs
検索結果を追加するために使用しますfind
。
別の方法として、-exec
オプションを使用して検索します。例:
find . -name "*.c" -exec grep -l search-pattern "{}" \;
また、-l
オプションが本当に必要かどうかはわかりませんgrep
。最初の一致で停止します:
-l, --files-with-matches
Suppress normal output; instead print the name of each
input file from which output would normally have been
printed. The scanning will stop on the first match.
(-l is specified by POSIX.)
find/xargs
スペースを含むファイル名の構文ブレーク。-L
オプションgrep
、各ファイルの最初の試合でストップし、次のファイルを続行:1のパターンのみが与えられたそれぞれのファイルで、それが迅速である、少なくとも一度含まれているかどうかを確認したい場合。
-print0
オプションとを使用して修正しましたxargs --null
。
--include=GLOB
オプションを知りませんでした。再帰的オプションと組み合わせることで、これは非常に強力であり、必要ありませんfind
。いいね!