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と一致する行を検索します。