TASIOMIND.DEV — OPERATIONAL▸▸▸FULL STACK DEVELOPER @ GWQ SERVICEPLUS AG▸▸▸FOUNDER — K8SGPT.AI▸▸▸OPEN SOURCE: ACTIVE▸▸▸DISTRIBUTED SYSTEMS / KUBERNETES / AI▸▸▸RUST + GO + PYTHON▸▸▸FIELD TESTED / STATUS — NOMINAL▸▸▸LOCATION: EUROPE/BERLIN▸▸▸TASIOMIND.DEV — OPERATIONAL▸▸▸FULL STACK DEVELOPER @ GWQ SERVICEPLUS AG▸▸▸FOUNDER — K8SGPT.AI▸▸▸OPEN SOURCE: ACTIVE▸▸▸DISTRIBUTED SYSTEMS / KUBERNETES / AI▸▸▸RUST + GO + PYTHON▸▸▸FIELD TESTED / STATUS — NOMINAL▸▸▸LOCATION: EUROPE/BERLIN▸▸▸

Anleitung: Dateien mit mehreren Erweiterungen in Bash auswählen

August 12, 2017

In der Kommandozeile ist es oft notwendig, Operationen auf einer Gruppe von Dateien auszuführen, die unterschiedliche, aber verwandte Dateiendungen haben (z.B. .jpg, .jpeg, .png). Bash bietet hierfür verschiedene Mechanismen, von einfacher Shell-Expansion bis hin zum mächtigen find-Befehl.


Methode 1: Brace Expansion (Geschweifte Klammern)

Brace Expansion ({...}) ist ein Mechanismus in Bash, um beliebige Strings zu generieren. Er ist ideal für einfache Suchen im aktuellen Verzeichnis.

code
# Listet alle .md-, .json- und .html-Dateien im aktuellen Verzeichnis auf
ls -l *.{md,json,html}
  • *.{md,json,html} wird von der Shell zu *.md *.json *.html expandiert, bevor der ls-Befehl ausgeführt wird.
  • Es dürfen keine Leerzeichen innerhalb der geschweiften Klammern sein.

Anwendungsbeispiel: Alle Bilddateien verschieben

code
# Verschiebt alle Bilder in einen Unterordner
mv *.{jpg,jpeg,png,gif} ./bilder/

Methode 2: find-Befehl (Rekursiv und Mächtig)

Für die rekursive Suche in Unterverzeichnissen oder für komplexere Filterkriterien ist der find-Befehl die robusteste Lösung. Der -o-Operator fungiert dabei als logisches "ODER".

Dateien mit mehreren Erweiterungen finden

code
# Sucht ab dem aktuellen Verzeichnis (.) nach regulären Dateien (-type f),
# deren Name entweder auf .html, .xml oder .php endet.
find . -type f \( -name "*.html" -o -name "*.xml" -o -name "*.php" \)
  • \( und \): Die Klammern gruppieren die -o-Bedingungen. Sie müssen mit einem Backslash escaped werden, damit sie nicht von der Shell interpretiert werden.
  • -o: Der ODER-Operator.

Aktionen auf gefundene Dateien anwenden

Sie können die gefundenen Dateien direkt an einen anderen Befehl übergeben.

Beispiel: Alle gefundenen Dateien löschen Warnung: Überprüfen Sie das Ergebnis immer zuerst, bevor Sie -delete verwenden.

  1. Trockenlauf (Dry Run):
    code
    find . -type f \( -name "*.tmp" -o -name "*.bak" \) -print
    
  2. Löschen:
    code
    find . -type f \( -name "*.tmp" -o -name "*.bak" \) -delete
    

Beispiel: Berechtigungen für alle Skript-Dateien setzen

code
find . -type f \( -name "*.sh" -o -name "*.py" \) -exec chmod +x {} \;

Fazit

  • Für schnelle Operationen im aktuellen Verzeichnis ist die Brace Expansion (*.{ext1,ext2}) die einfachste und lesbarste Methode.
  • Für rekursive Suchen oder wenn die Dateiliste als Eingabe für andere Befehle dienen soll, ist der find-Befehl mit -o die mächtigere und flexiblere Lösung.