`cari` wildcard perilaku aneh - mengapa?

9

locate "*.png"mengembalikan semua file yang diakhiri dengan .png, seperti yang diharapkan.

locate "test.*"tidak mengembalikan apa-apa, tetapi ada file yang dinamai testdalam sistem saya.

locate "*test"mengembalikan semua file yang diakhiri dengan test, seperti yang diharapkan.

locate "test*"tidak mengembalikan apa-apa, tetapi ada file yang dimulai dengan testdi sistem saya.

Mengapa wildcard tampaknya hanya berfungsi untuk "diakhiri dengan"?

Vittorio Romeo
sumber
1
Apakah Anda membangun kembali locatedb setelah membuat file yang cocok test*dan test.*?
Ignacio Vazquez-Abrams
@ IgnacioVazquez-Abrams: ya
Vittorio Romeo

Jawaban:

12

locate "test.*" tidak mengembalikan apa-apa, tetapi ada file bernama test di sistem saya.

.diperlakukan sebagai titik, bukan sebagai dalam regex sebagai karakter yang sewenang-wenang, jadi test.*tidak cocok test, tetapi test.foo.

locate "test*"tidak mengembalikan apa-apa, tetapi ada file yang dimulai dengan testdi sistem saya.

cari menyimpan path lengkap ke file , jadi untuk menemukan file yang dimulai dengan tes, Anda harus menggunakan locate "*/test*".

Poin terakhir mungkin membingungkan, seperti locate foomenemukan sesuatu termasuk foo, sehingga polanya ditafsirkan *foo*. Tampaknya polanya tidak tertutup bintang, jika sudah ada satu wildcard dalam polanya.

Penafian : Saya melakukan beberapa tes dan ini adalah kesimpulan saya, saya tidak dapat membuktikannya dengan mengutip halaman manual, yang tampaknya sangat sederhana.

mpy
sumber
3
Dalam saya man locatepunya: Jika --regex tidak ditentukan, POLA dapat berisi karakter globbing. Jika ada POLA yang tidak mengandung karakter globbing, cari berperilaku seolah-olah polanya adalah * POLA *.
gniourf_gniourf