* main.oを検索できるのに* .oを検索できないのはなぜですか?


19

これは正しいです:

$ find . -name *main.o
./main.o

だから、なぜ私は見つけることができません*.oか?

$ find . -name *.o
find: paths must precede expression: main.o
Usage: find [-H] [-L] [-P] [-Olevel] [-D help|tree|search|stat|rates|opt|exec] [path...] [expression]


あなたが正しいと呼ぶものも間違っています。現在のディレクトリに一致するものとサブディレクトリに一致するものがある場合、両方が同じ名前を持たない限り、両方を見つけることはできません。./sub/domain.oつまり、最初の例では、というファイルが見つかりませんでしたが、見つかりませんでした。
カスペルド14年

回答:


46

おそらくに一致するファイルは複数ありますが、一致するファイルは1つ*.oだけな*main.oので、最初のケースではシェル拡張が実行されます:

$ find . -name main.o

そしてこれは動作します。2番目の場合:

$ find . -name file1.o main.o

これがエラーになった理由です。

これを防ぐにはexpression、両方のコマンドで引用する必要があります。

$ find . -name '*.o'
$ find . -name '*main.o'

2
実際、echo *.ovsでこれを簡単に確認できますecho '*.o'
ルスラン14年

@Ruslan依存、グロブ(*?)に一致するファイルがない場合、bashはそれをリテラル文字として扱います。

@BroSlow間違いなく、私はOPがしていた特定の状況について話しました。
ルスラン

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.