名前がパターンに一致し、内容がパターンに一致するすべてのファイルに対してコマンドを実行するにはどうすればよいですか?

名前がパターンに一致し、内容がパターンに一致するすべてのファイルに対してコマンドを実行するにはどうすればよいですか?

単語を含むcmdすべて*.cppのファイルとファイルに対して実行したいとします。*.hppFOO

をする発見するファイルが消えます。できることを知っています。

find /path/to/dir -name '*.[hc]pp' -exec grep -l 'FOO' {} +

しかし、cmd私ができるように処理を拡張する正しい方法は何ですか(例:各ファイルごと)。

-exec bash -c '...'私は私ができると書くことができることを知っています。「コンテンツに次のものが含まれているFOO場合はcmd、ファイルから実行してください。」論理...なのに大砲を撃つような感じがする。

ベストアンサー1

-exec … \;また、内部コマンドが終了ステータス 0 を返す限り、テストは成功します。-exec … +1つのコマンドで多くのパス名を処理でき、常に成功するため、これは便利なテストではありません。

grep -q-exec … \;一致するものがある場合(エラーが検出された場合でも)、終了ステータス0を返し、そうでなければ1を返すので、一緒にうまく機能します。

-exec grep … +必要なコマンドを条件付きで実行するために別のファイルを追加できるように、ファイルを1つずつテストします。-exec grep -q … \;-exec

find /path/to/dir -name '*.[hc]pp' -exec grep -q 'FOO' {} \; -exec …

通常、-exec … \;テストを使用すると、ほぼすべてをテストできるカスタムテストを構築できます。これは、sh -cパイプ、操作可能な変数、シェル条件などを使用してテストを実行できるためです。少し:find -exec sh -c使っても安全ですか?)。

おすすめ記事