Saya ingin mencari file di direktori saat ini yang berisi teks "chrome".
$ find . -exec grep chrome
find: missing argument to `-exec'
Apa yang saya lakukan salah?
Anda melewatkan ;
(Lolos di sini sebagai \;
Untuk mencegah Shell menafsirkannya) atau +
Dan {}
:
find . -exec grep chrome {} \;
atau
find . -exec grep chrome {} +
find
akan mengeksekusi grep
dan akan mengganti {}
dengan nama file yang ditemukan. Perbedaan antara ;
Dan +
Adalah bahwa dengan ;
Satu perintah grep
untuk setiap file dieksekusi sedangkan dengan +
Karena banyak file mungkin diberikan sebagai parameter ke grep
sekaligus.
Anda tidak perlu menggunakan find
untuk ini sama sekali; grep dapat menangani membuka file baik dari daftar gumpalan segala sesuatu di direktori saat ini:
grep chrome *
... atau bahkan secara rekursif untuk folder dan semua yang ada di bawahnya:
grep chrome . -R
find . | xargs grep 'chrome'
anda juga dapat melakukan:
find . | xargs grep 'chrome' -ls
Yang pertama menunjukkan kepada Anda baris dalam file, yang kedua hanya daftar file.
Pilihan Caleb lebih rapi, lebih sedikit penekanan tombol.
Temukan adalah satu arah dan Anda dapat mencoba the_silver_searcher
maka yang perlu Anda lakukan adalah
ag chrome
Ini akan mencari chrome di semua file (termasuk sub direktori) dan lebih cepat daripada menemukan
Berikut adalah contoh bagaimana saya biasanya menggunakan find/...
find . -name "*.py" -print -exec fgrep hello {} \;
Ini mencari secara rekursif untuk semua file .py, dan untuk setiap file mencetak nama file dan fgrep untuk 'halo' pada file itu (untuk setiap). Outputnya seperti (baru jalankan satu hari ini):
./r1.py
./cgi-bin/tst1.py
print "hello"
./app/__init__.py
./app/views.py
./app/flask1.py
./run.py
./tst2.py
print "hello again"
Untuk melihat daftar file, bukan baris:
grep -l "chrome" *
atau:
grep -r -l "chrome" .