次のコマンドを実行していますが、再帰的には実行されません。
find . -name *.java
私は現在のディレクトリにjavaファイルもあることを知っていますが、find
現在のディレクトリでのみ実行されます。私はOS X 10.9を使用しています。
ベストアンサー1
問題は、パラメータを引用しないことです-name
。代わりにこれを行う:
find . -name '*.java'
説明する
引用符がない場合、シェルはそれを*.java
globパターンとして解釈し、に渡す前にglobと一致するファイル名に展開しますfind
。このようにしてfoo.java
現在のディレクトリにある場合、実際find
のコマンドラインは次のようになります。
find . -name foo.java
明らかに、これは現在のディレクトリのファイルのみをリストします(ツリーの下に同じ名前のファイルがある場合を除く)。
引用はグローバル拡張を防ぎ、find
コマンドラインをそのまま渡します。
しかし、globを一致させることができない場合(*.java
現在のディレクトリにファイルがありません)、一致しないglobを処理するようにシェルを設定する方法に応じて、2つの動作のうちの1つが得られます(nullglob
Bashのオプションで制御されます)。
- シェルが一致しない glob を拡張しない場合
find
(予期せず)、正しい動作を示します。 - シェルが一致しないglobを空の文字列に拡張すると、不足していると
find
文句を言います-name
。