回答:
問題は、-nameパラメーターを引用していないことです。代わりにこれを行います:
find . -name '*.java'
説明
引用符がないと、シェル*.javaはglobパターンとして解釈し、globに渡す前に、globに一致する任意のファイル名に展開しますfind。この方法で、たとえばfoo.java現在のディレクトリにある場合、find実際のコマンドラインは次のようになります。
find . -name foo.java
これは明らかに、現在のディレクトリのみにファイルをリストします(ツリーのさらに下にいくつかの同様の名前のファイルがある場合を除く)。
引用符は、グロブの展開を防ぎ、コマンドラインをfindそのまま渡します。
ちなみに、グロブが一致しなかった*.java場合(現在のディレクトリにファイルがない場合)、一致しないグロブを処理するようにシェルを設定する方法に応じて、2つの動作のいずれかが発生します(これはnullglobBash のオプションによって管理されます、 例えば):
find(偶然、気になります)正しい動作を示します。findへの引数が欠落していると文句を言います-name。エスケープ *
find . -name \*.java