Viele Dateien auf einmal bearbeiten mit find und xargs
find sucht Dateien nach Namen, Alter oder Größe – und mit xargs schickst du die Treffer stapelweise an einen anderen Befehl. So löschst, verschiebst oder konvertierst du hunderte Dateien mit einer Zeile. Inklusive der wichtigsten Sicherheits-Regel.
find ist das Schweizer Taschenmesser für Dateien: Es sucht rekursiv nach Namen, Endung, Alter oder Größe. Kombiniert mit xargs machst du daraus eine Stapelverarbeitung.
Erst finden – und immer zuerst nur anschauen
find . -name "*.tmp" # nur auflisten, was gefunden wirdWichtigste Regel: Bevor du löschst oder umbaust, lass dir die Treffer erst anzeigen. So merkst du sofort, wenn find mehr erwischt als gedacht.
Dann handeln
find . -name "*.tmp" -delete # alle .tmp-Dateien löschen
find . -type f -mtime +30 -name "*.log" # Logs, die älter als 30 Tage sind-type f– nur Dateien (keine Ordner)-mtime +30– zuletzt geändert vor mehr als 30 Tagen- **
-name "*.log"** – Namensmuster
An einen anderen Befehl übergeben: xargs
Wenn find selbst nicht kann, was du willst, reichst du die Treffer per xargs weiter:
# Alle PNGs mit ImageMagick verkleinern
find . -name "*.png" -print0 | xargs -0 -I{} mogrify -resize 1200x {}Der Schlüssel steht in -print0 und xargs -0: Sie trennen die Dateinamen mit einem Null-Zeichen statt mit Leerzeichen. Ohne das gehen Dateinamen mit Leerzeichen kaputt – ein Klassiker, der schon viele Skripte zerlegt hat. Nutz die beiden immer zusammen.
Willst du auf Nummer sicher gehen, häng vorm scharfen Lauf ein echo davor: xargs -0 -I{} echo mogrify … zeigt dir jeden Befehl, ohne ihn auszuführen.
Solche Automatisierungen nehmen dir stumpfe Handarbeit ab. Noch mehr davon gibt's auf code.bymw.de.
Quellen
Du brauchst mehr als ein Snippet?
Ich entwickle Android-Apps in Kotlin und moderne Websites für Selbstständige und kleine Unternehmen — von der ersten Idee bis zum Release.
Projekt anfragen →Verwandte Snippets
Zwei Listen vergleichen mit comm – wer fehlt, wer ist neu, wer ist in beiden
Welche Dateien fehlen im Backup? Welche Kunden aus der alten Liste stehen nicht in der neuen? Für genau diese Fragen gibt es seit Unix-Urzeiten ein Werkzeug, das kaum jemand kennt – comm vergleicht zwei sortierte Listen und sagt dir in einer Zeile, was nur links, nur rechts oder in beiden steht.
Warum deine Zählvariable nach der Schleife wieder 0 ist – Prozess-Substitution in Bash
Ein Klassiker, der jeden einmal erwischt: Du zählst in einer while-Schleife hoch, und hinterher steht die Variable trotzdem auf 0. Schuld ist eine Subshell hinter der Pipe. Mit Prozess-Substitution behältst du das Ergebnis – und kannst nebenbei zwei Befehle direkt vergleichen.
Pfade und Namen zerlegen — ganz ohne basename, dirname und sed
Die Shell kann Zeichenketten selbst zerschneiden. Kein Aufruf eines externen Programms, keine Pipe – nur geschweifte Klammern. Wenn du das einmal kennst, werden deine Skripte kürzer und deutlich schneller.