Dalam perintah ini:
find . -name \*.pyc -delete
Mengapa backslash diperlukan sebelumnya *.pyc
?
Dalam perintah ini:
find . -name \*.pyc -delete
Mengapa backslash diperlukan sebelumnya *.pyc
?
Jawaban:
Glob yang tidak dikutip akan diperluas oleh shell sebelum find
dieksekusi. (Lihat Ekspansi Nama File di manual.)
Jadi mengatakan:
find . -name *.pyc -delete
akan benar-benar mengeksekusi:
find . -name file1.pyc file2.pyc file3.pyc -delete
dengan asumsi ada 3 file .pyc di direktori saat ini dan menghasilkan kesalahan sebagai gantinya.
Sebuah backslash membuat shell melewati glob find
, artinya bertindak seperti *.pyc
dikutip.
Idealnya, Anda harus mengutip sebuah bola:
find . -name '*.pyc' -delete
Sebelum shell Anda mengeluarkan find
perintah, ia akan melakukan berbagai ekspansi . Melakukannya, itu juga memproses karakter khusus (atau, karakter dengan makna khusus), di mana *
wildcard - karakter globbing. Ini adalah apa yang disebut ekspansi nama file.
Katakanlah Anda memiliki dua file di direktori Anda:
foo.pyc
bar.pyc
Maka *.pyc
akan berkembang menjadi kedua nama. Jadi, jika Anda menulis:
find . -name *.pyc -delete
maka shell akan benar-benar memanggil:
find . -name foo.pyc bar.pyc -delete
yang tidak masuk akal, karena Anda hanya dapat memiliki satu argumen -name
. Itu sebabnya Anda perlu melarikan diri karakter khusus untuk mencegahnya ditafsirkan oleh shell. Anda melakukannya dengan melarikan diri backslash, atau sebagai alternatif, mengutipnya.
find
harus memiliki bagian yang disebutNON-BUGS
dengan sesuatu yang mirip sebagai contoh dan penjelasan mengapa diperlukan.