Saya mencoba secara rekursif mencari pola di semua file .c dengan cara berikut
> grep -lr search-pattern *.c
Tapi dapatkan ini sebagai output
> grep: *.c: No such file or directory
Ketika saya menggunakan ini:
> grep -lr search-pattern *
Saya mendapat banyak. file c dalam direktori dengan pola.
Apa yang salah dengan ungkapan sebelumnya?
--include=GLOB
pilihannya. Dalam kombinasi dengan opsi rekursif ini sangat kuat dan tidak memerlukanfind
. Bagus!.
di akhir perintah.The
*.c
pola dievaluasi oleh shell Anda. Ini berlaku untuk direktori saat ini, sama seperti yang Anda gunakanls *.c
.Saya pikir yang Anda inginkan adalah menemukan semua file yang cocok dengan
*.c
pola (secara rekursif) dangrep
mencari Anda di dalamnya. Inilah cara untuk melakukan itu:Ini digunakan
xargs
untuk menambahkan hasil pencarian olehfind
.Atau, gunakan
-exec
opsi untuk menemukan, misalnya:Juga, saya tidak yakin apakah Anda benar-benar menginginkan
-l
opsi itugrep
. Itu akan berhenti pada pertandingan pertama:sumber
find/xargs
sintaks istirahat pada nama file yang mengandung spasi. The-L
pilihan untukgrep
berhenti di pertandingan pertama setiap file dan lanjutkan dengan file selanjutnya: jika salah satu hanya ingin melihat apakah pola terkandung setidaknya sekali dalam setiap file yang diberikan, itu lebih cepat.-print0
opsi danxargs --null
.Saya tahu ini adalah utas yang agak lama, tetapi karena saya memiliki pertanyaan yang sama, saya ingin berbagi cara yang saya sukai untuk mencapai hal yang sama, Dalam bentuk yang jauh lebih pendek.
sumber