GNU/Linux >> Linux の 問題 >  >> Linux

ファイル名をGrepと一緒に印刷すると、Find -execになりますか?

fooというプログラムがあります findを介して見つかった各結果に対して実行したいと思います。だからこのようなもの:

find . -name '*.o' -type f -exec foo {} ;

fooのこれらすべての呼び出しの出力をgrepしたい 特定のストリングバーの場合。だから私はこれを追加します:

find . -name '*.o' -type f -exec foo {} ; | grep bar

しかし、一致がどのファイルから来ているかについての元の情報を失います。 -fprintf /dev/stderr '%pn'を追加してみました findへ コマンドですが、grepの結果が出力されないため、stdoutがなくなったように見えます。

各ファイル名を出力に出力し、その後、そのファイルに対応するgrep結果を出力するにはどうすればよいですか?

または、-Hを作成する方法があった場合 grepの引数 動作も問題ありませんが、stdinとgrepからテキストを渡すだけなので、記述どおりには動作しません。 ファイル名がわかりません。 xargsのさまざまな呪文を試しました 、しかし私もそれを機能させることができませんでした。

承認された回答:

各ファイル名を出力に出力し、その後にそのファイルに対応するgrep結果を出力するには、-exec foo {} | grep シェル内のパイプ:

find . -name '*.o' -type f -print -exec sh -c 'foo "$1" | grep "bar"' sh {} ;

-Hを作成するには ご使用のバージョンのgrepの場合、grepの引数は標準入力で機能します --label=をサポートします あなたができるオプション

find . -name '*.o' -type f -exec sh -c '
  foo "$1" | grep -H --label="$1" "bar"
' sh {} ;

または(検索結果が+をサポートしている場合 ;に代わる複数の引数 ):

find . -name '*.o' -type f -exec sh -c '
  for f; do foo "$f" | grep -H --label="$f" "bar"; done
' sh {} +

Linux
  1. 論理演算子を使用したGrep?

  2. 検索で拡張機能を省略しますか?

  3. 検索-exec+対検索| Xargs:どちらを選択しますか?

  1. Linuxで印刷するための3つのヒント

  2. Recursive Grep Vs Find / -type F -exec Grep {};どちらがより効率的/高速ですか?

  3. ファイル名が Bash でアンダースコア _ で正しく印刷されない

  1. Dfと矛盾するファイルシステムのDu結果?

  2. Find To Workで-execオプションを取得しますか?

  3. -execが失敗した場合の検索から抜け出しますか?