Neden * main.o dosyasını bulabilirim * * olamıyorum?


19

Bu doğru:

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

Peki, neden bulamıyorum *.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]


Doğru dediğin yanlış da. Geçerli dizinde bir eşleşme ve bir alt dizinde başka bir eşleşme varsa, her ikisi de aynı ada sahip olmadıkça her ikisini de bulamaz. Yani ilk örneğinizde, bulamadığı bir dosya olabilirdi ./sub/domain.o.
kasperd

Yanıtlar:


46

Muhtemelen eşleşen birden fazla dosya vardır *.o, ancak sadece bir dosya eşleşir *main.o, bu nedenle, ilk durumda kabuk genişletme çalışır:

$ find . -name main.o

ve bu işe yarıyor. İkinci durumda:

$ find . -name file1.o main.o

İşte bu yüzden hata alıyorsunuz.

Bunu önlemek expressioniçin her iki komutta da alıntı yapmanız gerekir :

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

2
Gerçekten, bunu kolayca echo *.ovs ile kontrol edebilirsiniz echo '*.o'.
Ruslan

@Ruslan Glob ( *, ?) bash ile eşleşen dosya yoksa onu karakter olarak değerlendirir.

@BroSlow şüphesiz OP'nin içinde bulunduğu özel durum hakkında konuşuyordum.
Ruslan

16

Dosya desenini tırnak içine alın. Aksi takdirde, * kabuk tarafından genişletilir (bulmadan önce bir dosya listesine çözümlenir), bulmayı karıştırır.

find . -name "*.o"

13
Alternatif olarak *ters eğik çizgi ile kaçış :find -name \*.o
David Foerster
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.