it-swarm-id.com

Bagaimana menjalankan find -exec?

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?

538
ripper234

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.

801
bmk

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
51
Caleb
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.

20
Mathew

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

7
Ask and Learn

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"
5
jon

Untuk melihat daftar file, bukan baris:

grep -l "chrome" *

atau:

grep -r -l "chrome" .
3