Frage 101-124

Das Kommando bla -abc erzeuge eine Liste von Dateinamen. Die so bestimmten Dateien wollen Sie mit dem Kommando blubb verarbeiten, aber der Kommandoaufruf

  blubb `bla -abc`

schlägt mit einer Fehlermeldung fehl -- die resultierende Kommandozeile ist zu lang. Mit welchem Kommando können Sie dieses Problem lösen? (Geben Sie nur den Kommandonamen an, ohne Pfad und ohne Optionen.)

Textfrage

LPI-Lernziel Ströme, Pipes und Umleitungen verwenden (103.4)

Das Kommando xargs ist eine nützliche Möglichkeit, Parameter von der Standardausgabe eines Kommandos auf die Kommandozeile eines anderen zu schaffen, ohne wegen der Länge der Kommandozeile Probleme zu bekommen. In der Tat darf die Kommandozeile bei gängigen Unix-artigen Systeme wie Linux heutzutage eine beträchtliche Länge aufweisen -- wenn Sie einen Wert für Ihr System herausfinden wollen, sagen Sie spaßeshalber mal getconf ARG_MAX in der Shell. Bei uns liefert das 2097152, und das ist nur ein garantiertes Minimum; das System darf durchaus mehr erlauben. Trotzdem ist das manchmal nicht genug.

xargs liest seine Standardeingabe und teilt sie (im einfachsten Fall) an Leerzeichen und Zeilentrennern in »Wörter« ein. Diese Wörter werden dann dem Kommando, das hinter xargs angegeben wurde, als »Kommandoparameter« übergeben, wobei xargs darauf achtet, dass die maximale Länge der Kommandozeile nicht überschritten wird. Ist seine Standardeingabe länger als das, was dem gewünschten Kommando auf einen Sitz übergeben werden kann, wird das Kommando gegebenenfalls mehrmals aufgerufen. Ein typisches Beispiel könnte ungefähr so aussehen:

$ find . -name "*.bak" | xargs rm

Das find-Kommando liefert hier eine (potentiell lange) Liste von Dateinamen, die von xargs ans rm-Kommando übergeben werden. Der Vorteil dieses Ansatzes gegenüber

$ find . -name "*.bak" -exec rm {} \;

ist, dass nicht für jeden Dateinamen, den find findet, ein rm-Prozess angestoßen wird, sondern jeder rm-Prozess die maximale Anzahl von Dateien übergeben bekommt.

Noch kein Kommentar · Kommentar hinzufügen · RSS

Wichtig

LPI-Logo

Die LPI Academy ist keine offizielle Webseite des LPI!

Sponsor

Linup-Front-Logo

Die LPI Academy wird für die Community unterstützt von der Linup Front GmbH

A Django Site

Diese Seite

Version: 0 (Anselm)
22.8.2009 01:07:27

Benutzer

Nicht angemeldet

Kommentare

RSS