EMZETT.
Login

find, xargs und jq: Dateien und JSON im Terminal verarbeiten

Kurz: find sucht Dateien nach Kriterien, xargs reicht Ergebnisse an andere Befehle weiter, und jq filtert und formt JSON-Daten direkt im Terminal.

Genauer: Diese drei Werkzeuge ergänzen Pipes (|) zu einer starken Werkzeugkette: Dateien finden, Inhalte weiterverarbeiten und strukturierte Antworten von APIs auswerten.

Im Detail

find

find . -name "*.log"                 # nach Name
find . -type f -size +100M            # Dateien über 100 MB
find . -mtime -1                      # in den letzten 24 h geändert
find . -type d -empty                 # leere Ordner
find . -name "*.tmp" -delete          # gefundene löschen (Vorsicht!)
find . -name "*.py" -exec wc -l {} +  # Befehl auf jede Datei

Prüfe die Ausgabe zuerst ohne -delete. Mit -iname ignoriert man Groß-/Kleinschreibung. Schneller und einfacher gibt es fd (moderne Alternative).

xargs

xargs nimmt Eingabezeilen und macht sie zu Argumenten eines Befehls:

find . -name "*.txt" | xargs grep "Fehler"
find . -name "*.jpg" -print0 | xargs -0 -P4 -I{} convert {} -resize 50% {}.klein.jpg

-print0 und -0 verarbeiten Dateinamen mit Leerzeichen sicher, -P4 führt vier Aufträge parallel aus, -I{} setzt das Argument an eine bestimmte Stelle.

jq: JSON verarbeiten

curl -s https://api.example.com/users | jq '.'              # schön formatieren
cat daten.json | jq '.[] | {name, mail}'                   # Felder auswählen
jq '.items[] | select(.preis > 10) | .name' daten.json     # filtern
jq -r '.[].name' daten.json                                # roh (ohne Anführungszeichen)
jq 'length' daten.json                                     # Anzahl

. ist das aktuelle Element, [] iteriert über Listen, | verbindet Filter, select() filtert, -r gibt rohen Text aus.

Zusammen

Beispiel: Alle JSON-Dateien im Ordner nach einem Feld durchsuchen:

find . -name "*.json" -print0 | xargs -0 jq -r '.titel'

Sichere Skripte immer mit Anführungszeichen um Variablen, teste Befehle an Kopien und nutze --dry-run-Optionen, wo vorhanden. Für große Datenmengen sind spezialisierte Werkzeuge (ripgrep, fd, Datenbanken) schneller.

Siehe auch: grep, sed und awk, Pipes und Umleitungen, curl und wget, Dateien suchen und finden