find、exec、およびgrepからファイル形式を除外する方法は?

find、exec、およびgrepからファイル形式を除外する方法は?

「TRACE_WANTED」フラグを使用するファイルを見つけようとします。ただし、ファインダーが.cと.hでこのフラグを検索したくありません。ファインダーを*.cから除外するにはどうすればよいですか?および *.h ファイル。

これは私が使用する一般的なコマンドです。

find ./ -iname  *.c -exec grep -iHrn  TRACE_WANTED {} \;

答え1

GNUはgrep組み込みの再帰検索からglobを除外できます。努力する:

grep -iHrn  --exclude='*.c' --exclude='*.h' TRACE_WANTED

これは、コマンドと同様に、現在のディレクトリから始まり、再帰的に検索されますfind。すべてのファイル*.cを除外します*.h

答え2

*.c および *.h ファイルを除いて、TRACE_WANTED という単語を含むファイルを探すだけであれば、以下を使用する必要もありません。探す、grepだけでも操作を実行できます。

 grep -r --exclude={"*.c","*.h"} TRACE_WANTED ./

デフォルトでは、bashでは引用符は必要ありませんが、zshでは必要です。

答え3

find . ! -name '*.[ch]' -type f -exec grep -l TRACE_WANTED {} +

grepまたは再帰検索が利用可能な場合-r

grep -lr --exclude='*.[ch]' TRACE_WANTED

関連情報