it-swarm.com.de

Wie führe ich find -exec aus?

Ich möchte die Dateien im aktuellen Verzeichnis finden, die den Text "chrome" enthalten.

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

Was mache ich falsch?

538
ripper234

Sie haben einen ; (Hier als \; Enthalten, um zu verhindern, dass die Shell ihn interpretiert) oder einen + Und einen {} Verpasst:

find . -exec grep chrome {} \;

oder

find . -exec grep chrome {} +

find führt grep aus und ersetzt {} durch die gefundenen Dateinamen. Der Unterschied zwischen ; Und + Besteht darin, dass mit ; Ein einzelner grep -Befehl für jede Datei ausgeführt wird, während mit + Ebenso viele Dateien ausgeführt werden möglichst werden grep sofort als Parameter angegeben.

801
bmk

Sie müssen find dafür überhaupt nicht verwenden; grep kann das Öffnen der Dateien entweder aus einer globalen Liste aller Elemente im aktuellen Verzeichnis übernehmen:

grep chrome *

... oder sogar rekursiv für Ordner und alles darunter:

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

sie können auch tun:

find . | xargs grep 'chrome' -ls

Die erste zeigt Ihnen die Zeilen in den Dateien, die zweite zeigt nur die Dateien.

Calebs Option ist ordentlicher, weniger Tastenanschläge.

20
Mathew

Suchen ist eine Möglichkeit und Sie können the_silver_searcher dann musst du nur noch tun

ag chrome

Es sucht chrome in allen Dateien (einschließlich Unterverzeichnissen) und ist schneller als find

7
Ask and Learn

Hier ist ein Beispiel, wie ich normalerweise find/exec verwende ...

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

Dies sucht rekursiv nach allen .py-Dateien und druckt für jede Datei den Dateinamen und die fgrep-Dateien nach 'Hallo' für diese (für jede) Datei aus. Die Ausgabe sieht so aus (hat heute nur eine ausgeführt):

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

So zeigen Sie eine Liste der Dateien anstelle von Zeilen an:

grep -l "chrome" *

oder:

grep -r -l "chrome" .
3