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