it-swarm.it

Come eseguire find -exec?

Vorrei trovare i file nella directory corrente che contengono il testo "chrome".

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

Che cosa sto facendo di sbagliato?

538
ripper234

Hai perso un ; (scappato qui come \; per impedire a Shell di interpretarlo) o un + e a {}:

find . -exec grep chrome {} \;

o

find . -exec grep chrome {} +

find eseguirà grep e sostituirà {} con il nome del file trovato. La differenza tra ; e + è quello con ; viene eseguito un singolo comando grep per ogni file mentre con + quanti più file possibili vengono dati come parametri a grep contemporaneamente.

801
bmk

Non è necessario utilizzare find per questo; grep è in grado di gestire l'apertura dei file da un elenco glob di tutto nella directory corrente:

grep chrome *

... o anche ricorsivamente per la cartella e tutto ciò che contiene:

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

puoi anche fare:

find . | xargs grep 'chrome' -ls

Il primo mostra le linee nei file, il secondo elenca solo i file.

L'opzione di Caleb è più ordinata, meno tasti.

20
Mathew

Trova è un modo e puoi provare the_silver_searcher allora tutto ciò che devi fare è

ag chrome

Cercherà chrome in tutti i file (include le sottodirectory) ed è più veloce di find

7
Ask and Learn

Ecco un esempio di come di solito uso find/exec ...

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

Questo cerca ricorsivamente tutti i file .py, e per ogni file stampa il (i) file (i) il nome del file e fgrep per 'ciao' su quel (per ciascuno) file. L'output sembra (ne ho appena eseguito uno oggi):

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

Per visualizzare un elenco di file anziché linee:

grep -l "chrome" *

o:

grep -r -l "chrome" .
3