Linux: xargs

9. Juli 2025

Das Linux-Tool xargs wandelt Standard-Input in Argumente für andere Kommandos um. Diese Funktionalität löst ein grundlegendes Problem: viele Unix-Kommandos benötigen Argumente, während andere ihre Ausgabe über Standard-Output bereitstellen.

Installation

# Ubuntu/Debian
sudo apt update
sudo apt install findutils

# macOS (bereits vorinstalliert)
which xargs

Windows: Verfügbar über Windows Subsystem for Linux (WSL).

Grundlegende Verwendung

Die einfachste Anwendung von xargs erfolgt durch Weiterleitung von Ausgaben:

# Alle .txt-Dateien anzeigen
find . -name "*.txt" | xargs cat

Sucht nach allen .txt-Dateien im aktuellen Verzeichnis und gibt deren Inhalt aus.

# Mehrere Dateien löschen
echo "file1.txt file2.txt file3.txt" | xargs rm

Löscht die drei angegebenen Dateien durch Übergabe als Argumente an das rm-Kommando.

Wichtige Optionen

-n: Argumente pro Aufruf begrenzen

# Jeweils 2 Argumente pro Kommando
echo "a b c d e f" | xargs -n 2 echo
# Ausgabe:
# a b
# c d
# e f

Teilt die Eingabe in Gruppen von 2 Argumenten auf und führt das Kommando für jede Gruppe separat aus.

-0: Null-terminierte Eingabe

Bei Dateinamen mit Leerzeichen ist diese Option essentiell:

# Sicher mit Leerzeichen im Dateinamen
find . -name "*.txt" -print0 | xargs -0 rm

Verwendet Null-Zeichen als Trennzeichen statt Leerzeichen, wodurch Dateinamen mit Leerzeichen korrekt verarbeitet werden.

-I: Platzhalter verwenden

# Datei-Backup erstellen
find . -name "*.txt" | xargs -I {} cp {} {}.backup

Die Option -I {} definiert {} als Platzhalter. Der String {} ist dabei beliebig wählbar – genauso funktioniert -I FILE mit FILE als Platzhalter oder -I % mit %. Die geschwungenen Klammern sind lediglich Konvention, da sie in Dateinamen normalerweise nicht vorkommen und somit eindeutig identifizierbar sind. Für jede gefundene Datei wird der Platzhalter durch den Dateinamen ersetzt. Das erste {} nach cp ist die Quelldatei, das zweite {}.backup ist die Zieldatei mit der Endung .backup. So wird aus dokument.txt ein Backup namens dokument.txt.backup erstellt.

Häufige Anwendungsfälle

Dateien verarbeiten

# Alle Python-Dateien formatieren
find . -name "*.py" | xargs black

Sucht alle Python-Dateien im aktuellen Verzeichnis und formatiert sie mit dem Code-Formatter black.

# Suche in mehreren Dateien
find . -name "*.log" | xargs grep "ERROR"

Durchsucht alle Log-Dateien nach dem Begriff „ERROR“ und zeigt die gefundenen Zeilen an.

Parallel verarbeiten

# 4 parallele Prozesse
cat urls.txt | xargs -n 1 -P 4 curl -O

Lädt URLs aus einer Textdatei parallel mit 4 gleichzeitigen curl-Prozessen herunter.

Typische Probleme vermeiden

Leerzeichen in Dateinamen

# Fehlerhaft
find . -name "*.pdf" | xargs rm

# Korrekt
find . -name "*.pdf" -print0 | xargs -0 rm

Leere Eingabe abfangen

# -r verhindert Ausführung bei leerer Eingabe
find . -name "*.xyz" | xargs -r rm

Debugging

# Kommandos anzeigen ohne Ausführung
echo "file1 file2" | xargs -t echo

Zeigt die zu ausführenden Kommandos an, ohne sie tatsächlich auszuführen – nützlich zum Testen.

# Bestätigung vor Ausführung
echo "file1 file2" | xargs -p rm

Fragt vor jeder Ausführung nach Bestätigung – verhindert versehentliche Aktionen bei kritischen Operationen.

Alternativen

Für einfache Fälle können Shell-Schleifen verwendet werden:

# Statt xargs
for file in *.txt; do
    process_file "$file"
done

Fazit

xargs ermöglicht die effiziente Transformation von Standard-Input in Kommandozeilen-Argumente. Die wichtigsten Optionen sind -0 für sichere Dateinamen-Verarbeitung, -n für Batch-Größen und -P für parallele Ausführung. Bei korrekter Anwendung steigert das Tool die Produktivität in der Kommandozeile erheblich.