linux-l: Anfaengerfrage: find | grep

Stefan Janke gonzo at burg.studfb.unibw-muenchen.de
Di Jul 29 12:29:16 CEST 1997


On Michael_Feldbinder at dara.de wrote:
> Ich suche DIE Datei, die einen bestimmten String enthält. Im Moment stehe
> ich auf der Leitung...
> 
> Also ich dachte mir "find" liefert die Dateinamen und grep nimmt sich diese
> und kloppft die Files auf den Suchstring ab: find | grep "nasa.gov" ...
> ... aber (lacher sind mir sicher) wird natuerlich nur die find-Ausgabe
> gegrept und nicht jede Datei die in der find-Ausgabe referenziert ist.
> So schwer wir das wohl nicht sein. Also schuettelt es Euch bitte mal aus
> dem Aermel.

Dazu gibt es verschiedene Moeglichkeiten:
1. grep OPTIONEN SUCHMUSTER `find . -name DATEIMUSTER -type f -print`
2. find . -name DATEIMUSTER -type f -print -exec grep OPTIONEN SUCHMUSTER {} /dev/null \;
3. find . -name DATEIMUSTER -type f -print | xargs grep OPTIONEN SUCHMUSTER /dev/null

Dabei muss OPTIONEN, DATEIMUSTER und SUCHMUSTER den eigenen Wuenschen angepasst werden.
Bei gnu-find kann das -print weggelassen werden. Wenn man in allen Dateien suchen will,
dann kann auch -name DATEIMUSTER entfallen.

Die erste Version hat den Nachteil, das find sehr viele Dateien finden kann, und dass so
die Kommandozeile zu lang werden kann. In der zweiten Version wird fuer jede Datei ein 
grep gestartet, was nicht sehr effektiv ist. Diese beiden Negativpunkte gibt es in der
dritten Version nicht, so dass dies die imho beste Loesung ist.

ciao stefan




Mehr Informationen über die Mailingliste linux-l