Bagaimana saya mencari semua file .java untuk string sederhana (bukan regex) di direktori saat ini dan semua sub-direktori pada Mac OS X? Saya hanya ingin mencetak daftar nama file dan direktori yang cocok.
Bagaimana saya mencari semua file .java untuk string sederhana (bukan regex) di direktori saat ini dan semua sub-direktori pada Mac OS X? Saya hanya ingin mencetak daftar nama file dan direktori yang cocok.
Jawaban:
Dan selalu populer
find . -name '*.java' | xargs grep -l 'string'
EDIT (oleh Frank Szczerba):
Jika Anda berurusan dengan nama file atau direktori yang memiliki spasi di dalamnya, cara teraman untuk melakukannya adalah:
find . -name '*.java' -print0 | xargs -0 grep -l 'string'
Selalu ada lebih dari satu cara untuk melakukannya.
Jawaban tradisional UNIX adalah jawaban yang diterima untuk pertanyaan ini:
find . -name '*.java' | xargs grep -l 'string'
Ini mungkin akan berfungsi untuk file Java, tetapi spasi dalam nama file jauh lebih umum di Mac daripada di dunia UNIX tradisional. Ketika nama file dengan spasi dilewatkan melalui pipa di atas, xargs akan menafsirkan kata-kata individual sebagai nama yang berbeda.
Yang Anda inginkan adalah memisahkan nama untuk membuat batas-batas menjadi tidak ambigu:
find . -name '*.java' -print0 | xargs -0 grep -l 'string'
Alternatifnya adalah membiarkan find menjalankan grep untuk Anda, seperti yang disarankan Mark, meskipun pendekatan itu lebih lambat jika Anda mencari sejumlah besar file (karena grep dipanggil sekali per file daripada sekali dengan seluruh daftar file).
Gunakan grep yang lebih baik daripada grep, ack :
ack -l --java "string"
Ini sebenarnya akan menggunakan regex jika Anda mau, tinggal jauh dari metakarakter, atau lepas darinya, dan Anda bisa mencari string.
find . -iname "*.java" -exec egrep -il "search string" {} \;
grep -rl --include="*.java" simplestring *
Lewati find
dan gunakan Spotlight
dari baris perintah. Jauh lebih kuat!
COMMAND LINE SPOTLIGHT - TEMUKAN TEMUKAN GREP
Kebanyakan orang tidak tahu Anda bisa melakukan pencarian Spotlight dari baris perintah. Mengapa ingat semua opsi menemukan dan menangkap misterius dan apa yang tidak ketika Anda dapat membiarkan Spotlight melakukan pekerjaan untuk Anda. Antarmuka baris perintah ke Spotlight disebut mdfind. Ia memiliki semua kekuatan yang sama dengan pencarian Spotlight GUI dan lebih banyak lagi karena scriptable di baris perintah!
Coba ini:
grep -rl "string" */*java
Anda juga bisa menggunakan program GUI seperti TextWrangler untuk melakukan pencarian yang lebih intuitif di mana opsi ada di antarmuka.
grep "(your string)" -rl $(find ./ -name "*.java")
Jika Anda ingin mengabaikan case, ganti -rl dengan -irl. (string Anda) juga bisa menjadi regex jika Anda pernah melihat kebutuhannya.