Der Befehl xargs liest Argumente aus der Standardeingabe und führt damit einen angegebenen Befehl aus. Er ist das Bindeglied zwischen der Ausgabe eines Befehls und der Eingabe eines anderen.

Syntax

xargs [OPTIONEN] [BEFEHL [ARGUMENTE]]
  • OPTIONEN - Flags, die das Verhalten von xargs steuern.
  • BEFEHL - Der auszuführende Befehl. Ohne Angabe wird /bin/echo verwendet.
  • ARGUMENTE - Optionale Startargumente für den Befehl.

Grundlegende Verwendung

Im einfachsten Fall übergibt xargs alle gelesenen Werte als Argumente an einen Befehl:

echo "datei1 datei2 datei3" | xargs touch

Dieser Befehl erstellt drei Dateien. Das entspricht dem direkten Aufruf:

touch datei1 datei2 datei3

Ausführung anzeigen und bestätigen

Die Option -t (oder --verbose) zeigt jeden Befehl vor der Ausführung an:

echo "datei1 datei2 datei3" | xargs -t touch

Ausgabe:

touch datei1 datei2 datei3

Mit -p (oder --interactive) fragt xargs vor jeder Ausführung nach Bestätigung:

echo "datei1 datei2 datei3" | xargs -p touch

Tippe y zur Bestätigung. Diese Option ist besonders nützlich bei Befehlen, die Daten löschen oder verändern.

Anzahl der Argumente begrenzen

Mit -n (oder --max-args) legst du fest, wie viele Argumente pro Befehlsaufruf übergeben werden:

echo "datei1 datei2 datei3" | xargs -n 1 -t touch

Ausgabe:

touch datei1
touch datei2
touch datei3

Der touch-Befehl wird hier dreimal mit je einem Argument ausgeführt statt einmal mit drei Argumenten.

Eigenes Trennzeichen definieren

Standardmäßig trennt xargs Argumente an Leerzeichen und Zeilenumbrüchen. Mit -d (oder --delimiter) kannst du ein anderes Trennzeichen festlegen:

echo "datei1;datei2;datei3" | xargs -d \; -t touch

Ausgabe:

touch datei1 datei2 datei3

Platzhalter für mehrere Befehle

Die Option -I definiert einen Platzhalter, der in der Befehlszeile durch das aktuelle Argument ersetzt wird. So kannst du mehrere Befehle pro Argument ausführen:

echo "datei1 datei2 datei3" | xargs -I % sh -c 'touch %; ls -l %'

Der Platzhalter % ist üblich, aber du kannst jeden beliebigen String verwenden:

echo "datei1 datei2" | xargs -I FILE sh -c 'touch FILE; ls -l FILE'

Argumente aus einer Datei lesen

Mit -a (oder --arg-file) liest xargs die Argumente aus einer Datei statt von der Standardeingabe:

xargs -a server.txt -L 1 ping -c 1

Die Option -L 1 sorgt dafür, dass jede Zeile einzeln verarbeitet wird. Ohne diese Option würde xargs alle Zeilen als Argumente an einen einzigen Befehlsaufruf übergeben.

Kombination mit find

Die häufigste Verwendung von xargs ist die Kombination mit find. Um Probleme mit Sonderzeichen in Dateinamen zu vermeiden, verwende find -print0 zusammen mit xargs -0:

find /var/cache -type f -print0 | xargs -0 rm -f

Die Option -print0 von find trennt die Ausgabe mit Nullzeichen statt Zeilenumbrüchen. Die Option -0 von xargs interpretiert diese Ausgabe korrekt.

Ein weiteres Beispiel - alle .log-Dateien finden und deren Größe anzeigen:

find /var/log -name "*.log" -print0 | xargs -0 du -h

Leerzeichen entfernen

Ein nützlicher Nebeneffekt: xargs ohne Argumente entfernt führende und abschließende Leerzeichen aus einer Zeichenkette:

echo "   Text mit Leerzeichen   " | xargs

Ausgabe:

Text mit Leerzeichen

Das ist praktisch in Shell-Skripten, wenn du Variablen vergleichen musst:

#!/bin/bash

VAR1="   kommandozeile.org   "
VAR2="kommandozeile.org"

if [[ $(echo "$VAR1" | xargs) == "$VAR2" ]]; then
    echo "Die Zeichenketten sind gleich."
fi

Wichtige Optionen im Überblick

OptionBeschreibung
-tZeigt jeden Befehl vor der Ausführung an
-pFragt vor jeder Ausführung nach Bestätigung
-n ZAHLBegrenzt die Anzahl der Argumente pro Aufruf
-d ZEICHENDefiniert ein eigenes Trennzeichen
-I PLATZHALTERErsetzt den Platzhalter durch das Argument
-L ZAHLVerarbeitet eine bestimmte Anzahl Zeilen pro Aufruf
-a DATEILiest Argumente aus einer Datei
-0Erwartet Nullzeichen als Trennzeichen

Zusammenfassung

Der Befehl xargs wandelt Standardeingaben in Befehlsargumente um. In Kombination mit find und anderen Befehlen ermöglicht er komplexe Dateioperationen in einer einzigen Befehlszeile.

Verwandte Artikel