Saya mengalami kesulitan mencari untuk menemukan kecocokan di direktori saat ini serta subdirektori.
Ketika saya menjalankannya find *test.c
hanya memberi saya kecocokan di direktori saat ini. (tidak melihat dalam subdirektori)
Jika saya mencoba, find . -name *test.c
saya akan mengharapkan hasil yang sama, tetapi itu hanya memberi saya kecocokan yang ada di subdirektori. Ketika ada file yang harus cocok dengan direktori kerja, itu memberi saya:find: paths must precede expression: mytest.c
Apa artinya kesalahan ini, dan bagaimana saya bisa mendapatkan kecocokan dari direktori saat ini dan subdirektori?
find
dari msysgit mungkin melemparkan kesalahan ini kecuali jika Anda mengelilingi pola dengan kutipan:find . -name "*test.c"
. (Jika Anda memilih untuk lebih suka Windows berbedafind.exe
dan menggunakan dari cmd)Jawaban:
Coba letakkan dalam tanda kutip - Anda berlari ke ekspansi wildcard shell, sehingga apa yang sebenarnya Anda lewati untuk menemukan akan terlihat seperti:
... menyebabkan kesalahan sintaksis. Jadi cobalah ini sebagai gantinya:
Perhatikan tanda kutip tunggal di sekitar ekspresi file Anda - ini akan menghentikan shell (bash) memperluas wildcard Anda.
sumber
echo *test.c
... hasilnya tidak akan gema memperluas wildcard, tetapi shell itu sendiri. Pelajaran sederhana adalah jika Anda menggunakan wildcard, kutip filespec :-)find . -type f -printf ‘%TY-%Tm-%Td %TT %p\n’
seperti yang ditemukan di web, dan bertemu dengan "jalan harus mendahului ekspresi". Masalahnya adalah tanda kutip terlalu "pintar". Saya mengetik ulang perintah, menyebabkan tanda kutip diganti, dan itu berlari.find
- jika menggunakan wildcard*.$variable
Anda perlu tanda kutip ganda.Yang terjadi adalah shell memperluas "* test.c" ke daftar file. Coba lepaskan tanda bintang sebagai:
sumber
find . -name '*txt'
Coba masukkan dalam tanda kutip:
sumber
Dari cari manual:
sumber
Saya menemukan pertanyaan ini ketika saya mencoba untuk menemukan beberapa nama file yang tidak dapat saya gabungkan menjadi ekspresi reguler seperti yang dijelaskan dalam jawaban @ Chris J, inilah yang bekerja untuk saya
-o
atau-or
logis ATAU. Lihat Menemukan File di Gnu.org untuk informasi lebih lanjut.Saya menjalankan ini di CygWin.
sumber
Dalam kasus saya, saya kehilangan
/
jejak di jalur.sumber
/
tidak diperlukan.