* On Tue, 24 Jun 2003 at 17:55 +0200, Axel Heinrici wrote: [...]
Naja, da kommen dann aber nur die Zeilen aus irgendwelchen Dateien raus die "egal" enthalten. Ich vermute mal, dass da aber die Dateinamen der Dateien die "egal" enthalten rauskommen soll.
find ./ -name '*.txt' -exec grep -q egal {} \; -exec echo {} \;
Da kommen dann die Dateinamen raus die find gefunden hat und bei denen grep "egal" gefunden hat. grep -q testet ob egal in der Datei enthalten ist und gibt nur einen Rückgabewert und keine Ausgabe auf stdout. Das echo wird nur ausgeführt, wenn der erste grep Erfolgreich war.
Das geht auf jeden Fall eine Möglichkeit; aber bei sehr vielen Dateien ein wenig langsam, da sehr viele Prozesse gestartet werden - das kostet ein wenig Zeit. grep kann schon von sich aus nur die Namen der passenden Dateien ausgeben - mit dem Parameter '-l': find ./ -name '*.txt' -exec grep -l egal {} \; Ausserdem kann mit xargs die Prozessflut noch ein wenig eingedämmt werden: find ./ -name '*.txt' | xargs grep -l egal xargs fasst mehrere Aufrufe und grep zu einem einzigen Aufruf zusammen; es werden dabei jeweils so viele Dateinamen als möglich zusammnen übergeben. Diese Variante hat aber noch ein Problem, wenn ein Dateiname Leerzeichen o.ä. enthält, der würde von xargs auf 2 aufgespalten. Besser ist es, die Dateinamen mit einem Nullwert zu trennen: find ./ -name '*.txt' -print0 | xargs -0 grep -l egal /apm -- GPG welcome, request public key: mailto:adalbert+key@lopez.at