xargs liest Argumente von der Standard-Eingabe und übergibt sie einem Befehl. Es ist die Brücke zwischen Pipes, die Text liefern (find, grep, ls), und Befehlen, die Argumente erwarten (rm, cp, wc) — unverzichtbar für effiziente Shell-Skripte.

Grundlagen

find . -name "*.tmp" | xargs rm        # gefundene Dateien löschen
ls *.txt | xargs wc -l                  # Zeilen aller Textdateien zählen
echo "a b c" | xargs echo               # Standard: echo mit allen Argumenten

Wichtige Optionen

find . -name "*.log" | xargs -n 1 wc -l   # -n: max. Argumente pro Aufruf
find . -print0 | xargs -0 rm               # -0: Null-getrennt, sicher bei Leerzeichen
find . -name "*.jpg" | xargs -I {} cp {} /backup/   # -I: Platzhalter pro Argument
find . -type f | xargs -P 4 gzip            # -P: parallel mit 4 Prozessen

Typische Praxis

cat urls.txt | xargs -n 1 curl -O        # jede URL einzeln laden
grep -l "ERROR" *.log | xargs -I {} cp {} /tmp/fehler/
seq 1 100 | xargs -I {} echo "Nummer {}"

Praxis-Tipps

  • Dateinamen mit Leerzeichen: -print0 bei find und -0 bei xargs verwenden — sonst wird der Name in mehrere Argumente zerlegt.
  • Ohne Befehl gibt xargs die Argumente einfach aus — gut zum Testen.
  • Mit -p fragt xargs vor jedem Aufruf nach, mit -t zeigt es jeden Befehl an — beides hilft beim Debuggen.
  • Sehr lange Argumentlisten packt xargs automatisch in mehrere Aufrufe; mit -n lässt sich die Stückelung steuern.

Verwandte Grundlagen: find-Befehle, Bash-Befehle und grep-Befehle.