次のコマンドを実行していますが、再帰的に実行されません:

find . -name *.java 

現在のディレクトリのさらに下にJavaファイルがあることは知っていますが、現在のディレクトリでのみfindを実行しています。 OS X、10.9を使用しています。

回答

問題は、パラメータ。代わりにこれを実行してください:

find . -name "*.java" 

説明

引用符がない場合、シェルは*.javaをglobパターンとして解釈し、globに一致するファイル名に展開してから渡します。 findに移動します。このように、たとえば、現在のディレクトリにfoo.javaがある場合は、findの実際のコマンドラインは次のようになります。

find . -name foo.java 

これは明らかに現在のディレクトリにあるファイルのみを一覧表示します(同じような名前のファイルがある場合を除く)

引用すると、globの拡張が防止され、コマンドラインがそのままfindに渡されます。

ちなみに、 globが一致しませんでした(現在のディレクトリに*.javaファイルがありませんtory)、一致しないグロブを処理するようにシェルがどのように設定されているかに応じて、2つの動作のいずれかが得られます(これは、たとえば、Bashのnullglobオプションによって制御されます):

  1. 一致しないグロブがシェルによって展開されない場合、findは(偶然にも)正しい動作を示します。
  2. 一致しないグロブがシェルによって空の文字列に展開された場合、find-name

回答

私が周囲にいたのと同じような状況がありました。 -引用符で値を指定しますが、それでも私が期待していたすべての検索ヒットを取得できませんでした。シンボリックリンクのせいだと推測しましたが、確かにそうだったのです。検索でシンボリックリンクを検索するように強制する場合は、コマンドを次のように変更できます。

find -L . -name "*.java" 

コメント

  • シンボリックリンクも私の問題でした。 -followは、他のパラメーターの前に置く限り、-Lのより読みやすい同義語です。
  • すばらしい!どうもありがとう!! +1!

回答

*

find . -name \*.java 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です