Saya menjalankan perintah berikut, tetapi tidak dilakukan secara rekursif:
find . -name *.java
Saya tahu ada file java lebih jauh di direktori saat ini tetapi hanya menjalankan finddirektori saat ini saja. Saya menggunakan OS X, 10.9.
Saya menjalankan perintah berikut, tetapi tidak dilakukan secara rekursif:
find . -name *.java
Saya tahu ada file java lebih jauh di direktori saat ini tetapi hanya menjalankan finddirektori saat ini saja. Saya menggunakan OS X, 10.9.
Jawaban:
Masalahnya adalah, Anda tidak mengutip -nameparameter Anda . Lakukan ini sebagai gantinya:
find . -name '*.java'
Penjelasan
Tanpa tanda kutip, shell mengartikan *.javasebagai pola glob dan memperluasnya ke nama file apa pun yang cocok dengan glob sebelum meneruskannya find. Dengan cara ini, jika Anda memiliki, katakanlah, foo.javadi direktori saat ini, findbaris perintah sebenarnya adalah:
find . -name foo.java
yang jelas akan mencantumkan file dalam direktori saat ini saja (kecuali Anda kebetulan memiliki beberapa file dengan nama yang sama lebih jauh ke bawah pohon).
Mengutip mencegah ekspansi gumpal dan meneruskan baris perintah findapa adanya.
Secara kebetulan, jika glob gagal mencocokkan (tidak ada *.javafile di direktori saat ini), Anda akan mendapatkan salah satu dari dua perilaku tergantung pada bagaimana shell Anda diatur untuk menangani gumpalan yang tidak cocok (ini diatur oleh nullglobopsi di Bash , sebagai contoh):
findakan (secara tidak sengaja, ingatkan Anda) menunjukkan perilaku yang benar.findakan mengeluh bahwa ia tidak memiliki argumen -name.Saya memiliki situasi yang serupa di mana saya mengelilingi nilai -nama dalam tanda kutip, tetapi masih belum mendapatkan semua temuan yang saya harapkan. Saya menduga bahwa itu karena symlink dan cukup yakin itulah masalahnya. Jika Anda ingin memaksa find untuk mencari melalui symlink, Anda dapat memodifikasi perintah sebagai berikut:
find -L . -name '*.java'
-followadalah sinonim yang lebih mudah dibaca untuk -L, selama Anda meletakkannya sebelum params lainnya.
Escape the *
find . -name \*.java