パイプの検索とgrepが何も返さないのはなぜですか?

パイプの検索とgrepが何も返さないのはなぜですか?

grep次から返された指定されたファイル内で検索しようとしていますfind

find . -type d -name 'mydir*' -exec find '{}' -name '*.java' \; | grep 'MyClass'

これはうまくいきません。

その間、これはうまくいきます。

grep 'MyClass' $(find . -type d -name 'mydir*' -exec find '{}' -name '*.java' \;)

最初の例にはどのような問題がありますか?

ベストアンサー1

最初の場合、grepはファイル名のリストを返しfind、2番目の場合はファイル名のリストがgrepの引数であるため、grepはファイル内を検索します。

パイプは、名前付きファイルではなく標準入力です。これがgrepが異なる動作をする理由です。
からman grep

grepは、名前付き入力ファイル(またはファイル名が指定されていない場合、または単一のハイフンマイナス記号(-)がファイル名として指定されている場合は標準入力)から、指定されたPATTERNと一致する行を検索します。

おすすめ記事