Re: (leicht OT) Unterschied grep unter bsd/linux?

From: Oliver Fromme <olli(at)lurza.secnetix.de>
Date: Thu, 5 Jun 2008 16:54:42 +0200 (CEST)

Aron Schlesinger wrote:
> Oliver Fromme wrote:
> > [...]
> > Ich persönlich verwende nie grep -r (oder -R), sondern
> > verwende find in Verbindung mit xargs. Dies ist flexibler,
> > und ich habe den Eindruck, dass es auch schneller ist (ich
> > habe aber keine Benchmarks gemacht).
> >
> > find . -type f -not -name '*.svn' | xargs grep hurz
> >
> > (Wenn man's häufig braucht, ist das natürlich ein Kandidat
> > für einen Alias oder eine Shell-Funktion.)
>
> dann doch lieber:
>
> find . -type f ... -exec grep -H hurz {} \;
>
> sonst muss man ja das gesamte find Ergebnis abwarten...

Halte ich für eine schlechte Idee, weil dann das grep-
Kommando für jede einzelne Datei ausgeführt wird. Bei
einer großen Anzahl Kommandos ist das tierisch ineffi-
zient. Den fork+exec-Overhead sollte man nicht unter-
schätzen.

xargs führt das grep-Kommando aus, sobald das find genug
Dateien gefunden hat, um eine Kommandozeile zu füllen,
maximal aber 5000 Stück, also nicht zwangsläufig das ge-
samte Ergebnis. In der Regel geht das relativ zügig, es
sei denn, man arbeitet auf einem sehr lagsamen Medium (CD-
ROM) oder auf einem Dateisystem, das eh bereits überlastet
ist.

Als Kompromiss kann man in dem Fall z.B. "xargs -n 20"
verwenden, so dass grep bis zu 20 Dateien am Stück nehmen
darf. Aber im Normalfall halte ich das für überflüssig.

(Übrigens kennt find auch noch die Syntax "-exec ... {} +",
was genauso wie xargs mehrere Dateien zu einer Kommando-
zeile sammelt. Dies hat folglich die gleichen Vor- und
Nachteile wie xargs, ist aber weniger flexibel.)

Meine find-Zile oben hatte übrigens einen Fehler, da sie
nur die cvn-Verzeichnisse selbst überspringt, aber nicht
deren Inhalt. Besser wäre:

find . -name '*.svn' -prune -or -type f -print | xargs grep hurz

(Falls Leerzeichen in Dateinamen vorkommen können, dann
natürlich "... -print0 | xargs -0 ...".)

Gruß
   Olli

-- 
Oliver Fromme, secnetix GmbH & Co. KG, Marktplatz 29, 85567 Grafing b. M.
Handelsregister: Registergericht Muenchen, HRA 74606,  Geschäftsfuehrung:
secnetix Verwaltungsgesellsch. mbH, Handelsregister: Registergericht Mün-
chen, HRB 125758,  Geschäftsführer: Maik Bachmann, Olaf Erb, Ralf Gebhart
FreeBSD-Dienstleistungen, -Produkte und mehr:  http://www.secnetix.de/bsd
"The ITU has offered the IETF formal alignment with its
corresponding technology, Penguins, but that won't fly."
        -- RFC 2549
To Unsubscribe: send mail to majordomo(at)de.FreeBSD.org
with "unsubscribe de-bsd-questions" in the body of the message
Received on Thu 05 Jun 2008 - 16:54:51 CEST

search this site