Pertanyaan Mengapa saya dapat menemukan * main.o tetapi tidak bisa * .o?


Yang ini benar:

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

Jadi, mengapa saya tidak dapat menemukannya *.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]

19
2017-10-15 23:39


asal


Duplikat dari askubuntu.com/questions/112722/…? - T.J. Crowder
Yang Anda sebut benar juga salah. Jika ada satu pertandingan di direktori saat ini dan pertandingan lain dalam subdirektori, itu tidak akan dapat menemukan keduanya kecuali keduanya kebetulan memiliki nama yang sama. Yaitu. dalam contoh pertama Anda mungkin ada file bernama ./sub/domain.o, yang tidak ditemukan. - kasperd


Jawaban:


Mungkin ada lebih dari satu file yang cocok *.o, sementara hanya satu file yang cocok *main.o, jadi, dalam kasus pertama, ekspansi shell berjalan:

$ find . -name main.o

dan ini berhasil. Dalam kasus kedua:

$ find . -name file1.o main.o

Dan inilah mengapa Anda salah.

Untuk mencegah ini, Anda harus mengutip expression di kedua perintah:

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

46
2017-10-15 23:55



Memang, orang dapat dengan mudah memeriksa ini dengan echo *.o vs echo '*.o'. - Ruslan
@Ruslan Tergantung, jika tidak ada file yang cocok dengan glob (*, ?) bash akan memperlakukannya sebagai karakter literal. - BroSlow
@BroSlow tidak diragukan lagi, saya sedang berbicara tentang situasi khusus yang dilakukan OP. - Ruslan


Masukkan pola file dalam tanda kutip. Jika tidak, * diperluas oleh shell (diselesaikan ke daftar file sebelum menemukannya), membingungkan find.

find . -name "*.o"

17
2017-10-15 23:53



Atau melarikan diri * dengan backslash: find -name \*.o - David Foerster