Technologieführer

Linux‑Wildcards: Globbing verständlich erklärt

8 min read Linux Aktualisiert 17 Sep 2025
Linux-Wildcards einfach erklärt
Linux-Wildcards einfach erklärt

Linux-Maskottchen am Laptop mit mehreren Terminal-Fenstern

Schnellzugriff

  • Was sind Wildcards?

  • Ein einzelnes Zeichen spezifizieren: ?

  • Mehrere Zeichen mit * matchen

  • Zeichenbereiche mit eckigen Klammern

  • Alternativen mit geschwungenen Klammern und Klammern

  • Ausschlüsse mit ! und ^

  • Platzhalter abschalten mit Quoting

Was sind Wildcards?

Wildcards sind Shell-Metazeichen, die für eine oder mehrere Zeichen stehen können. Sie vereinfachen die Arbeit im Terminal, indem sie Listen von Dateinamen erzeugen, die dann an Programme übergeben werden. Wichtig: Die Shell wertet Wildcards aus und ersetzt sie durch die passenden Dateinamen, bevor ein Programm (z. B. ls, grep, cp) aufgerufen wird. Das Programm selbst sieht die Wildcards nicht.

Kurz definiert: Globbing ist das Ersetzen eines Musters durch die passenden Pfadnamen.

Hinweis zur Kompatibilität: Nicht alle Shells unterstützen jedes erweiterte Muster. ?, und [] sind weit verbreitet. Erweiterte Muster wie * (rekursiv) oder Alternativen in Klammern werden in modernen Shells wie zsh und in Bash mit aktivierter “extended globbing” unterstützt.

Wichtige Begriffe in einer Linie:

  • Shell: das Programm (z. B. bash, zsh), das eingaben verarbeitet und Globs auflöst.
  • Globbing: Musteraufweitung der Shell.
  • Pattern: Das Wildcard-Muster, z. B. *.txt.

Ein einzelnes Zeichen spezifizieren: ?

Das Fragezeichen steht für genau ein beliebiges Zeichen außer dem Verzeichnis-Trennzeichen ‘/‘. Beispiele:

ls photo.0?.jpg

Das matcht photo.001.jpg oder photo.012.jpg, aber nicht photo.01.jpg (weil dort nur eine Ziffer fehlt) und nicht photo.001.jpg in einem anderen Verzeichnis, da ‘/‘ nicht ersetzt wird.

Einzelnes Zeichen mit ? in ls erkennen

Wenn kein Dateiname passt, hängt das Verhalten von Ihrer Shell-Einstellung ab: Entweder erhalten Sie eine Fehlermeldung (z. B. “no matches found” in zsh) oder die Shell übergibt das Muster unangetastet an das Programm (älteres Verhalten) oder zeigt nichts an. In Bash können Sie das Verhalten mit shopt einstellen.

Mehrere Zeichen mit * matchen

Der Stern (*) steht für null oder mehr Zeichen (außer ‘/‘). Er ist die wohl häufigste Wildcard:

ls *.jpg

zeigt alle JPEGs im aktuellen Verzeichnis.

Mehrere Zeichen mit * in ls erkennen

Beispiele:

ls photos/*.jpg
ls *.p?
ls *d*

Rekursive Matches mit (bei zsh standardmäßig; in Bash mit Globstar aktivierbar via shopt -s globstar):

ls ~/
ls /usr//bin

erklärt: In zsh durchsucht standardmäßig Unterverzeichnisse; in Bash sucht nur rekursiv, wenn die Option globstar aktiviert ist.

Die Konstruktion . aus MS‑DOS ist unter Linux unnötig: * allein matcht alles.

Vorsicht: destructive Kommandos mit Wildcards (z. B. rm) sind riskant. Testen Sie Muster vorher mit ls oder echo.

echo rm *.tmp   # zeigt, welche Dateien betroffen wären
rm -i *.tmp     # Nachfragen vor dem Löschen

Zeichenbereiche mit eckigen Klammern

Mit [ ] können Sie einzelne Zeichen oder Bereiche spezifizieren:

[abc]   # a oder b oder c
[a-z]   # alle Kleinbuchstaben
[A-Z]   # alle Großbuchstaben
[0-9]   # alle Ziffern
[a-zA-Z0-9] # alphanumerisch

Kombiniert mit anderen Mustern:

ls *.p[ly]      # matcht .pl und .py
ls file[0-9].txt
ls [!a-z]*      # Dateien, die nicht mit Kleinbuchstaben beginnen

ls mit eckigen Klammern für Perl/Python-Extensions

Beachten Sie: Ein führendes Ausrufezeichen (!) oder ein ^ direkt nach der öffnenden Klammer invertiert die Klasse (siehe Abschnitt Ausschlüsse).

Alternativen mit geschwungenen Klammern und Klammern

Es gibt zwei unterschiedliche Mechanismen, die oft verwechselt werden: geschwungene Klammern {a,b} sind für die Expansion auf Wortebene (Brace expansion) und werden von der Shell selbst erzeugt; sie sind keine Wildcards im engeren Sinn, sondern eine Liste von alternativen Wörtern:

echo {cat,dog}
# Ausgabe: cat dog

echo {a..d}
# Ausgabe: a b c d

echo {1..10}
# Ausgabe: 1 2 3 4 5 6 7 8 9 10

Dagegen werden in manchen Shells Alternativen in Klammern mit dem senkrechten Strich (|) verwendet, dies ist typischerweise Teil erweiterter Globbing-Regeln (z. B. in zsh oder in Bash mit extglob):

ls *.(pl|py)    # in zsh oder Bash mit extglob
ls +([0-9])     # +(... ) ist extglob-Syntax

Erklärung einfacher extglob-Operatoren (bei aktivierter extglob in Bash oder in zsh):

  • +(pattern) : mindestens einmal pattern
  • *(pattern) : null oder mehrmals pattern
  • ?(pattern) : null oder einmal pattern
  • @(a|b) : genau a oder b
  • !(pattern) : alles außer pattern

Wenn Sie extglob in Bash nutzen wollen, aktivieren Sie es mit:

shopt -s extglob

Ausschlüsse mit ! und ^

Innerhalb eckiger Klammern invertiert ein führendes ! oder ^ die Klasse:

ls [!a-z]
ls [^a-z]

Das bedeutet: matcht Zeichen, die nicht Kleinbuchstaben sind.

In extglob kann man ganze Muster ausschließen:

ls !(a|b|c)

Das matcht alle Einträge, die nicht a, b oder c entsprechen.

Platzhalter abschalten mit Quoting

Wenn Sie Wildcards nicht von der Shell auswerten lassen möchten (z. B. weil Sie ein Muster an grep weitergeben oder eine Zeichenkette mit * speichern wollen), nutzen Sie Quoting:

  • Einzelne Anführungszeichen (‘) deaktivieren Expansion vollständig (auch Variablen werden nicht ersetzt).
  • Doppelte Anführungszeichen (“) schützen die meisten Metazeichen, lassen aber Variablen- und Backtick-Expansion zu.

Beispiele:

grep '^foo' file.txt      # ^ als Anfangsanker für grep, nicht als Negation für die Shell
pattern="foo.*bar"
grep "$pattern" file.txt  # Variablen werden expandiert, Globs nicht
'

Wenn Sie ein Muster exakt an ein Programm übergeben möchten, das selber Globs behandelt, quote es entsprechend.

Shell-spezifische Details und Optionen

Bash vs zsh: Beide Shells unterstützen die grundlegenden Globs (?, *, []). Unterschiede und Erweiterungen:

  • zsh hat sehr mächtige Globbing-Features standardmäßig (z. B. für Rekursion, erweiterte Qualifier wie :e, :r zum Filtern nach Dateiendungen/typ).
  • Bash unterstützt extglob und globstar, muss diese Optionen teils aktivieren:
# Bash: rekursives Globbing
shopt -s globstar
ls /*.md

# Bash: erweiterte Muster
shopt -s extglob
ls !(node_modules|.git)

Qualifier in zsh (Beispiele):

  • */.py(.N) # nur reguläre Dateien (kein Symlink) mit Prüfung
  • ls */.jpg(N) # N = nullglob: kein Fehler, wenn keine Matches

Prüfen Sie die Dokumentation Ihrer Shell (man bash, man zsh), bevor Sie erweiterte Muster produktiv einsetzen.

Sicherheit und Vorsichtsmaßnahmen

Wildcards können mächtig und gefährlich sein. Praxisregeln:

  • Vorschau immer mit echo oder ls, bevor Sie destructive Kommandos (rm, mv, cp) ausführen.
  • Verwenden Sie rm -i oder setzen Sie eine sichere Alias-Policy: alias rm=’rm -i’.
  • Arbeite in einem Testverzeichnis, wenn Sie komplexe Muster ausprobieren.
  • Vermeide Globs, die leere Listen an rm übergeben; nutzen Sie -f mit Bedacht.
  • Verwenden Sie absolute Pfade in Skripten, um Überraschungen durch unterschiedliche CWDs zu vermeiden.

Sicherheitsbeispiel:

# unsicher
rm *

# sicherer: prüfen
echo rm *
rm -i *

Wichtig: Beim Arbeiten mit root-Rechten sind Fehler fatale. Legen Sie Backups an.

Gegenbeispiele und typische Fehlerfälle

Wann versagen Wildcards oder produzieren unerwartete Ergebnisse:

  • Muster überschreitet Verzeichnisgrenze: und ? matchen niemals ‘/‘. Verwenden Sie * (mit globstar) für rekursive Suche.
  • Versteckte Dateien (beginnend mit ‘.’) werden nicht von erfasst. Nutzen Sie . oder explizite Pattern.
  • Locale/Encoding kann Zeichenklassen beeinflussen; [a-z] verhält sich je nach Locale unterschiedlich.
  • Dateinamen mit ungewöhnlichen Zeichen (Leerzeichen, Zeilenumbruch, Steuerzeichen) können unerwartet gesplittet werden. Verwenden Sie null-terminierte Ausgaben (find -print0 | xargs -0).

Beispiel: versteckte Dateien kopieren

cp .* /backup/   # kann '.' und '..' beinhalten – Vorsicht!
# besser
shopt -s dotglob   # Bash: * inkludiert jetzt Dateien, die mit . beginnen
cp -- * /backup/

Alternative Werkzeuge und Kombinationen

Wildcard-Matching ist sehr praktisch, aber manchmal besser ergänzt durch:

  • find: feingranulare Suche (zeit-, größen-, typbasiert) und sichere Handhabung mit -exec oder -print0
  • grep: Filtert nach Inhalt
  • rsync: Kopieren mit Filterregeln und Schutz gegen versehentliches Überschreiben
  • fd / ripgrep: moderne Tools mit schneller Suche und sicheren Default-Optionen

Beispiel-Kombination:

find . -type f -name "*.log" -mtime +30 -print0 | xargs -0 rm -v

Snippets und Cheat Sheet

Schnelle Referenz

?          # genau ein Zeichen
*          # null oder mehr Zeichen
[abc]      # a oder b oder c
[a-z]      # Bereich
[!0-9]     # kein Ziffernzeichen
{a,b,c}    # Brace expansion (Worte)
**         # rekursiv (bei aktivierter globstar)
!(pattern) # extglob: alles außer pattern

Preview-Technik

echo rm *.tmp
ls -d -- *pattern*

Aktivieren in Bash

shopt -s extglob globstar dotglob

Entscheidungshilfe (Mermaid)

flowchart TD
  A[Will ich rekursiv suchen?] -->|Ja| B{Verwendet zsh oder Bash+globstar}
  B -->|Ja| C[** verwenden]
  B -->|Nein| D[find oder rsync nutzen]
  A -->|Nein| E[Standard-Globs '*, ?, []']
  E --> F{Brauche ich Alternativen}
  F -->|Ja| G[Brace expansion oder extglob]
  F -->|Nein| H[Einfaches Muster]

Role‑basierte Checklisten

Administrator

  • Immer mit echo/vorherigem ls prüfen.
  • Bei Massenlöschungen Backups erstellen.
  • Globstar und extglob dokumentieren, wenn in Skripten verwendet.

Entwickler

  • In Skripten stets set -u/-o errexit und explizite Pfade nutzen.
  • Test-Umgebung verwenden, wenn komplexe Muster eingesetzt werden.

Skriptautor

  • Verwende printf ‘%s\0’ und xargs -0 wenn möglich.
  • Explizite Fehlerbehandlung: prüfen, ob Matches leer sind.

Kompatibilität und Migrationshinweise

  • Bash (Version >= 4) unterstützt globstar und extglob, muss aber mit shopt aktiviert werden. Auf älteren Systemen prüfen.
  • zsh bietet erweiterte Globbing-Features standardmäßig; Portierung von Skripten zwischen bash und zsh kann Anpassungen erfordern.
  • Windows CMD/PowerShell verwenden andere Musterregeln; Skripte sind nicht portabel ohne Anpassung.

Kurzes Glossar

  • Glob: Muster mit Wildcards zur Dateinamensauswahl.
  • Brace expansion: Erzeugt mehrere Wörter aus {a,b} oder {1..10}.
  • extglob: Erweiterte Globbing-Syntax in Bash/zsh für komplexe Muster.

Testfälle und Akzeptanzkriterien für Muster in Skripten

  • Akzeptanzkriterium 1: Ein Muster darf kein ‘/‘ matchen, wenn nicht rekursiv gewünscht ist.
  • Akzeptanzkriterium 2: Skript validiert, ob Matches vorhanden sind; bei keiner Übereinstimmung wird ein sinnvoller Fehler ausgegeben.
  • Akzeptanzkriterium 3: Skript dokumentiert benötigte Shell-Optionen (z. B. extglob).

Testvorgehen:

  • Erzeuge Testdateien mit verschiedenen Namen (Leerzeichen, Punkt, Unicode).
  • Führe Muster aus und vergleiche gegen erwartete Liste.

Kurzbeispiele aus der Praxis

Erstelle Backups aller .conf-Dateien:

mkdir -p ~/backup/conf
cp /etc/*.conf ~/backup/conf/

Entferne alle temporären Logfiles älter als 30 Tage:

find /var/log -type f -name "*.log" -mtime +30 -print0 | xargs -0 rm -v

Liste alle Python-Dateien rekursiv (Bash mit globstar):

shopt -s globstar
ls **/*.py

Privacy und Sicherheitshinweise für Firmennetzwerke

  • Vermeiden Sie das Ausführen von Wildcard-gestützten Befehlen in geteilten Verzeichnissen ohne Berechtigungsprüfung.
  • Protokollieren Sie Massenoperationen (z. B. rsync/cp/rm) in Change-Logs.
  • Benutzen Sie sichere, auditable Tools (rsync, git) statt unkontrollierter Massenlöschungen.

Faktenbox

  • Grundlegende Wildcards: ?, * und [ ] funktionieren in praktisch allen Unix-Shells.
  • Erweiterte Globs (extglob, globstar, **) sind Shell-abhängig und oft optional.
  • Hidden files beginnen mit ‘.’ und werden von * nicht erfasst, sofern nicht dotglob gesetzt ist.

Zusammenfassung

Wildcards sind ein mächtiges Mittel für die Arbeit auf der Kommandozeile. Die Grundmuster ?, *, [ ] genügen für die meisten Aufgaben. Erweiterte Globbing-Optionen in Bash und zsh bieten zusätzliche Flexibilität, erfordern jedoch Aufmerksamkeit bei Sicherheit und Kompatibilität. Testen Sie Muster vorher mit echo oder ls und verwenden Sie in Skripten klare Dokumentation und Fallbacks.

Wichtig: Vorschau vor Destruktivoperationen, absichern von Skripten (Optionen dokumentieren) und bei Bedarf auf robuste Tools wie find oder rsync zurückgreifen.


Wenn Sie möchten, kann ich ein kurzes Cheatsheet im Druckformat erstellen, eine Version für Anfänger mit nur drei essenziellen Befehlen oder eine Ausgabe optimiert für zsh mit Beispielen zu Qualifiern.

Autor
Redaktion

Ähnliche Materialien

Podman auf Debian 11 installieren und nutzen
DevOps

Podman auf Debian 11 installieren und nutzen

Apt-Pinning: Kurze Einführung für Debian
Systemadministration

Apt-Pinning: Kurze Einführung für Debian

FSR 4 in jedem Spiel mit OptiScaler
Grafikkarten

FSR 4 in jedem Spiel mit OptiScaler

DansGuardian + Squid (NTLM) auf Debian Etch installieren
Netzwerk

DansGuardian + Squid (NTLM) auf Debian Etch installieren

App-Installationsfehler auf SD-Karte (Error -18) beheben
Android

App-Installationsfehler auf SD-Karte (Error -18) beheben

Netzwerkordner mit KNetAttach in KDE
Linux Netzwerk

Netzwerkordner mit KNetAttach in KDE