Horst Jäger
irgendwas kriege ich hier nicht auf die Reihe: wenn ich alle Dateien suchen will, die z.B. mit ".txt" aufhören und "egal" enthalten, geht das nicht mit find / -iname "*.txt" | grep egal , weil das die gelieferten Pfade durchsuchen würde und also alles liefert, was mit ".txt" aufhört und im Pfad irgendwo "egal" enthält. So weit kapier ich noch alles.
Warum geht es aber nicht mit find / -iname "*.txt" | cat | grep egal ? Meine Frage ist eigentlich zweiteilig:
1. Wie suche ich Dateien, die z.B. mit ".txt" aufhören und "egal" enthalten? 2. Warum klappt das mit cat nicht? Insbesondere: warum verkettet mir find / -iname "*.txt" | cat nicht einfach die Inhalte aller Dateien, die mit ".txt" aufhören?
cat erhält keine Kommandozeilenargumente, was soll es also tun?
cat wird normalerweise so aufgerufen:
cat file1 file2 ....
oder auch
cat file1 - file2 ....
was bedeutet: wenn file1 gelesen wurde, dann lese stdin, und wenn stdin
fertig, dann lese file2 ....
Richtig geht es so:
find <dir> -iname "*.txt" | xargs grep egal
---------------------------^^^^^^
xargs nimmt liest stdin und ruft das angegebene Programm auf, mit den
Argumenten, die xargs gelesen hat.
Achtung: Das Programm kann mehrfach aufgerufen werden, dann wenn die
Kommandozeile zulange werden würde.
oder auch
Martin Schmiderer
was Du suchst ist find / -iname '*.txt' -exec grep egal {} \;
hier wird aber für jede Datei die find findet grep aufgerufen (d.h. ein Prozess wird gestartet), und das macht dann schon in der Performance bemerkbar. Deshalb ist "xargs grep" schneller, da hier nur wenige Prozesse gestartet werden. Jürgen -- Dr.rer.nat. Juergen Vollmer, Viktoriastrasse 15, D-76133 Karlsruhe Tel: +49(721) 9204871 Fax: +49(721) 24874 juergen.vollmer@[informatik-vollmer.de|alumni.uni-karlsruhe.de|acm.org] www.informatik-vollmer.de