Yang ini benar:
$ find . -name *main.o
./main.o
Jadi, mengapa saya tidak dapat menemukan *.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]
command-line
find
Tom Brito
sumber
sumber
./sub/domain.o
, yang tidak ditemukannya.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:dan ini berhasil. Dalam kasus kedua:
Dan inilah mengapa Anda mendapat kesalahan.
Untuk mencegah ini, Anda harus mengutip
expression
dalam kedua perintah:sumber
echo *.o
vsecho '*.o'
.*
,?
) bash akan memperlakukannya sebagai karakter literal.Masukkan pola file dalam tanda kutip. Kalau tidak, * diperluas oleh shell (dipecahkan ke daftar file sebelum find melihatnya), membingungkan find.
sumber
*
dengan backslash:find -name \*.o