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

Oliver Bandel oliver at first.in-berlin.de
Di Okt 11 12:35:23 CEST 2005


On Tue, Oct 11, 2005 at 10:18:37AM +0200, Volker Grabsch wrote:
> 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!

Ebenfalls "ähhm": Waren wir nicht gerade bei find und nich bei xargs?!


> 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

ööööhhh... war das nicht "--"?


[...]
> Leider funktionieren nicht alle Tools so, vorallem bei Konvertern
> (ps2pdf, convert, pnmtojpeg, ...) vermisse ich das.

Nun, die müssen eh die gesamten Daten erst mal ins RAM laden
und dann wüst drauf herum werkeln, denk ich mal.
Wenn man streams liest, macht man das auch meist deshalb,
um one-pass Daten zu verarbeiten; braucht man mehrere passes
oder muß eh alles im RAM halten und auf Arrays oder so rum arbeiten,
dann hat man eh viel im RAM, dann spart also stream-Verarbeitung
nichts beim verkleinern des Speicherbedarfs.


> Die können nicht
> mal mehrere Input-Dateien als Argumente entgegen nehmen, was ich
> wiegesagt aber eh nicht für allzu sinnvoll halte.

Ist ja u.U. auch schwierig, wenn man mehrere Dateien aus stdin
liest und die in z.B. andere Dateien ablegen soll.
Wie will man die Sachen da unterscheiden? Und wie ggf.
die Namen der Ausgabe entsprechend zuordnen?
*.ps => *.pdf und man kriegt alles boß per stdin?

geht eben nicht immer so, wie man's gerne haben will. ;-(


> 
> 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).

Diese Konzepte machen aber nicht in jedem Falle Sinn.
Via CLI kann man die Parameter ganz gut voneinander trennen,
bei stdin müsste man ein eigenes Protokoll entwickeln, das zwischen
Steuerdaten (Filenamen) und Nutzdaten 8die eigentlichen
Dateiinhalte) unterscheidet.
Da lkandet man dann wieder beim Quoting-Problem, das wir schon
beim Parser-zeugs besprochen hatten: Metacharacters, also
z.B. \ usw., oder man muß die Eingabedaten auf bestimmte Zeichen
beschränkt wissen, ...

Gruß,
   Oliver



Mehr Informationen über die Mailingliste linux-l