it-swarm-tr.com

Find -exec nasıl çalıştırılır?

Geçerli dizinde "chrome" metnini içeren dosyaları bulmak istiyorum.

$ find . -exec grep chrome
find: missing argument to `-exec'

Neyi yanlış yapıyorum?

538
ripper234

Bir ; (buradan \; Kabuğun yorumlamasını önlemek için) veya + ve bir {}:

find . -exec grep chrome {} \;

veya

find . -exec grep chrome {} +

findgrep yürütecek ve {} ile dosya adları bulundu. Arasındaki fark ; ve +, ; her dosya için tek bir grep komutu yürütülürken, + bir defada grep parametresine mümkün olduğunca çok dosya verilir.

801
bmk

Bunun için find kullanmanıza gerek yoktur; grep, dosyaları geçerli dizindeki her şeyin bir glob listesinden açmayı başarabilir:

grep chrome *

... hatta klasör ve altındaki her şey için özyinelemeli olarak:

grep chrome . -R
51
Caleb
find . | xargs grep 'chrome'

ayrıca şunları da yapabilirsiniz:

find . | xargs grep 'chrome' -ls

Birincisi dosyalardaki satırları gösterir, ikincisi sadece dosyaları listeler.

Caleb'in seçeneği daha temiz, daha az tuşa basmak.

20
Mathew

Bulmanın bir yolu var ve deneyebilirsiniz the_silver_searcher o zaman tek yapmanız gereken

ag chrome

chrome tüm dosyalarda (alt dizinleri dahil eder) arayacaktır ve bulmaktan daha hızlıdır

7
Ask and Learn

İşte genellikle nasıl find/exec kullanmak için bir örnek ...

find  . -name "*.py" -print -exec fgrep hello {} \;

Bu, tüm .py dosyaları için özyinelemeli olarak arama yapar ve her dosya için dosya adını ve fgrep'leri o (her biri için) dosyadaki 'merhaba' için yazdırır. Çıktı şöyle görünür (bugün bir tanesini yayınladı):

./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

Satırlar yerine dosyaların listesini görmek için:

grep -l "chrome" *

veya:

grep -r -l "chrome" .
3