単語を含むcmd
すべて*.cpp
のファイルとファイルに対して実行したいとします。*.hpp
FOO
をする発見するファイルが消えます。できることを知っています。
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
使っても安全ですか?)。