On Wed, Sep 27, 2000 at 02:54:22PM +0200, Martin Schmitt wrote:
> * Sebastian G?ndisch ([EMAIL PROTECTED]) wrote/schrieb:
>
> > Bin nicht f�ndig geworden. Sollte man irgendwie ein Script schreiben das alle
> > Unterverzeichnisse durchgeht und grep in einer Schleife alle Dateinamen
> > nacheinander �bergibt?
>
> So in der Art. Entweder wie Markus es schreibt, oder die Ausgabe von find
> manuell verwursten. Wenn es nicht ganz tief in die Hierarchie geht, nehme
> ich auch oft "grep foo */*".
>
> Mit manueller Verwurstung meine ich sowas:
>
> find . -name "*" -print|
> while read i
> do
> grep foo $i 2>/dev/null && echo $i
> done
Noch 'ne Variante hierzu ist
find [...] -type f -exec grep -l "blabla" {} \;
-type f ist notwendig, damit grep nicht meckert, wenn es
Verzeichnisse vorgesetzt bekommt. In -exec erscheint die Ausgabe
von find in {}. Eine weitere sehr n�tzliche Option von find ist
-maxdepth n. find hat �berhaupt tausende sch�ner Optionen/Filter
und kann eigentlich immer als Namens-Lieferant f�r andere
Programme dienen. Wenn die Dateinamen Leerzeichen enthalten
(oder andere shell-inkompatiblen Sachen) kann man noch ein xargs
(statt -exec) dazwischenh�ngen:
find ... -print0 |xargs --null TuWas
Mit dem -print0 / --null werden die Namen dann als 0-terminierte
strings (C-m��ig) weitergegeben - ohne da� die shell (die
Leerzeichen sonst als Trenner behandelt und die Namen dann
auseinandernimmt) dazwischenfunkt.
grep -l
gibt nur den Dateinamen aus, nicht die Zeile mit dem Treffer (hat
den selben Effekt wie Martin's grep ... $i ... && echo $i).
>
> > Leider kann ich nicht Shellprogrammieren :(
>
> Das kann jeder. ;-)
Jau. Man mu� nur manpages lesen k�nnen. Und wenn man das nicht kann,
mu� man halt C lernen. ;-)
> -martin
>
Bj�rn.
--
\|/
t(h)ree
---------------------------------------------------------------------------
PUG - Penguin User Group Wiesbaden - http://www.pug.org