ファイル名パターンを指定する再帰 Grep

ファイル名パターンを指定する再帰 Grep

再帰的に検索し、指定されたファイルパターンを使用できますか?

同等の仕事をしようとしています。

find ./ -name "*.[c|h]" -exec grep -Hn PATTERN {} \;

明らかにgrepの-rフラグを使用できますが、ファイル名パターンを指定するときは次のようになります。

grep -Hn -r PATTERN *.c

再帰的ではなく、現在のディレクトリで* .cファイルのみを探します。

これが見つかりましたが、ファイルの命名については言及しません。再帰 grep と find/-type f -exec grep{}\;どちらがより効率的で速いですか?

答え1

少なくとも最新バージョンのGNUでは、引数にgrepglobパターンを使用できます。--include

grep -Hrn --include="*.[ch]" PATTERN .

.[GNU grep > 2.11 では、使用時に明示的な起動ディレクトリを省略できます-r。]

答え2

実行する前にも*.cシェルによって拡張されます。grep適切にクールなシェル(たとえば、zshコレクションbashを含むglobstar)を使用すると、次のことで再帰的に事前に拡張できます。

grep bla **/*.[ch]

しかし、これはシェルソリューションです。別の解決策は、これらのツールでファイル検出のサポートを調べることです。銀を探す人コード検索リップグレップ

関連情報