Bagaimana saya bisa menemukan kata dalam file tertentu yang cocok dengan suatu pola. misalnya mencari version
di CMake*
file yang ditemukan secara rekursif di direktori saat ini.
Jawaban yang Diterima:
Jika Anda ingin melihat nama file dan nomor baris, POSIXly:
find . -name 'CMake*' -type f -exec grep -nF /dev/null version {} +
(Anda tidak ingin menggunakan ;
di sini yang akan menjalankan satu grep
per berkas). Itu standar yang setara dengan GNUisme:
find . -name 'CMake*' -type f -print0 | xargs -r0 grep -nHF {} +
find
(yang pertama), xargs
(di detik) akan meneruskan sebanyak mungkin argumen ke grep
mungkin tanpa melebihi batas jumlah argumen yang dapat Anda berikan ke sebuah perintah. Saat melakukan pemisahan itu, bisa terjadi bahwa untuk proses terakhir, hanya satu argumen yang diteruskan ke grep
dalam hal ini grep
tidak akan mencetak nama file. Itu sebabnya Anda membutuhkan /dev/null
di sana (atau -H
dengan GNU grep
).
Dengan -type f
, kami hanya mempertimbangkan file biasa (bukan perangkat, symlink, pipa, direktori…).
Jika Anda ingin menggunakan GNUisme, Anda dapat menggunakan GNU grep
kemampuan untuk turun ke pohon direktori:
grep -rHnF --include='CMake*' version .
Anda tidak ingin menggunakan -R
karena itu menyebabkan grep
untuk mengikuti symlink saat menuruni pohon direktori dan membaca dari perangkat, fifos, soket…
Versi tersebut lebih aman dan efisien, tetapi tidak portabel.