[linux-l] Re: find(1) mit und ohne xargs(1)

Volker Grabsch vog at notjusthosting.com
Di Okt 11 10:18:37 CEST 2005


On Tue, Oct 11, 2005 at 01:20:12AM +0200, Oliver Bandel wrote:
> fork/exec sollte da flotter sein.
>
> Naja, und pipe-Konzepte möglicherweise noch schneller?

Ja. Weil das zweite Programm dann nicht für jede einzelne Datei
gestartet wird, sondern nur *einmal*. Sprich: Kein wirklicher
Overhead.

> (Kommt wohl immer drauf an, was die jew. aufgerufenen Programme
> an Anforderungen haben (lesen die z.B. überhaupt aus der Pipe? (usw.)).

Ähhm ... du weiß schon, was xargs macht?
Das *liest* doch aus der Pipe!
Das Programm, welches von xargs gestatet wird, wird dann *einmal*
gestartet, und bekommt sämtliche Dateien als Argumente. Das Programm
muss deshalb gar nicht von Pipes lesen können (darum kümmert sich
xargs!), sondern es muss lediglich mehrere Parameter akzeptieren.

Dennoch, da hast du recht, wäre es viel effizienter, wenn das
aufgerufende Programm die Dateien nicht per Parameter, sondern
auch per Pipeline entgegennehmen kann. Viele Tools haben bereits eine
solche Option, mit der man eine Datei angeben kan, in der die Input-
Dateien aufgelistet sind. Bzw. statt dieser Listen-Datei gibt man
halt "-" ein, und schon wird diese von Stdin, also aus der Pipe
gelesen. Dann braucht man xargs nicht mehr, und arbeitet *noch*
effizienter.

Leider funktionieren nicht alle Tools so, vorallem bei Konvertern
(ps2pdf, convert, pnmtojpeg, ...) vermisse ich das. Die können nicht
mal mehrere Input-Dateien als Argumente entgegen nehmen, was ich
wiegesagt aber eh nicht für allzu sinnvoll halte.

Das geht in die selbe Richtung wie unsere Iterator vs. Listen
Diskussion: Wenn ich eine variable Datenmenge (z.B. Dateiliste)
habe, dann will ich sie erstmal als Iterator bekommen (d.h. als
Stream, von ner Pipe), und nicht den Umweg über Listen gehen
(d.h. per xargs, das alles sammelt und mit einem Schlag dem
aufgerufenden Programm übergibt).


Viele Grüße,

	Volker

-- 
Volker Grabsch
---<<(())>>---
Administrator
NotJustHosting GbR



Mehr Informationen über die Mailingliste linux-l