Linux: xargs
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.