xargs
Das xargs-Programm fällt etwas aus dem Rahmen der übrigen in diesem Kapitel
behandelten Programme. xargs übergibt alle aus der Standardeingabe gelesenen Daten einem Programm als zusätzliche Argumente. Der Programmaufruf wird einfach als Parameter von xargs angegeben. xargs Programm [Parameter] Ein Beispiel soll die Funktionsweise klarmachen: $ Is *.txt | xargs echo Textdateien:
Hier erzeugt ls eine Liste aller Dateien mit der Endung .txt im aktuellen
Verzeichnis. Das Ergebnis wird über die Pipe an xargs weitergereicht. xargs ruft echo
mit den Dateinamen von ls als zusätzliche Parameter auf. Der Output ist dann:
Textdateien: kap1.txt kap2.txt kap3.txt h.txt
Durch Optionen ist es möglich, die Art der Umwandlung der Eingabe in Argumente
durch xargs zu beeinflussen. Mit der Option -n <Nummer> wird eingestellt, mit
wievielen Parametern das angegebene Programm aufgerufen werden soll. Fehlt der
Parameter, nimmt xargs die maximal mögliche Zahl von Parametern. Je nach Anzahl der
Parameter ruft xargs das angegebene Programm einmal oder mehrmal auf. Dazu ein Beispiel.
Vergleich einer Reihe von Dateien nacheinander mit einer vorgegebenen Datei:
ls *.dat | xargs -n1 cmp compare Muster
Die Vergleichsdatei "Muster" wird der Reihe nach mitels cmp mit allen Dateien verglichen,
die auf ".dat" enden. Die Option -n1 veranlaßt xargs, je Aufruf immer nur einen Dateinamen
als zusätzliches Argument bei cmp anzufügen.
Mit der Option - i <Zeichen> ist es möglich, an einer beliebigen Stelle im Programmaufruf,
auch mehrmals, anzugeben, wo die eingelesenen Argumente einzusetzen sind. In diesem Modus
liest xargs jeweils ein Argument aus der Standardeingabe, ersetzt im Programmaufruf jedes
Vorkommen des hinter - i angegebenen Zeichens durch dieses Argument und startet das Programm.
In dem folgenden Beispiel wird das benutzt, um alle Dateien mit der Endung ".txt" in
".bak" umzubenennen.
ls *.txt | cut -d. f1 | xargs -iP mv P.txt P.bak
Das Ganze funktioniert allerdings nur, wenn die Dateien nicht noch weitere Punkte im
Dateinamen haben.
xargs ist überall dann besonders notwendig, wenn die Zahl der Argumente
recht groß werden kann. Obwohl Linux elend lange Kommandozeilen zuläßt,
ist die Länge doch begrenzt. xargs nimmt immer soviele Daten aus dem
Eingabestrom, wie in eine Kommandozeile passen und führt dann das gewünschte
Kommando mit diesen Parametern aus. Liegen weitere Daten vor, wird das Kommando
entsprechend oft aufgerufen. Insbesondere mit dem folgenden Kommando sollte xargs
verwendet werden, da find immer den gesamten Dateipfad liefert, also schnell recht
lange Argumente weitergibt.
|