navigation Navigation


Globbing


Globbing ist eine Technik in Unix-basierten Systemen wie Linux, die verwendet wird, um Dateinamen mithilfe von Platzhaltern zu erweitern oder zu „matchen“. Diese Platzhalter sind spezielle Zeichen oder Muster, die in der Shell verwendet werden, um mehrere Dateien oder Verzeichnisse zu spezifizieren, ohne sie einzeln angeben zu müssen.

Glob-Syntax in Linux

Es gibt mehrere Arten von Platzhaltern (Glob-Mustern), die in Linux verwendet werden können. Die gebräuchlichsten sind:

  • Asterisk (*)
  • Fragezeichen (?)
  • Eckige Klammern ([])
  • Negation innerhalb eckiger Klammern ([^]) oder ([!...])
  • Geschweifte Klammern ({})

Asterisk (*)

Die Klammern {} enthalten eine durch Komma getrennte Liste von Strings. Wenn die Shell auf eine solche Konstruktion stößt, wird sie in jede mögliche Kombination der angegebenen Strings expandiert.

Beispiel
*.txt

Dies matcht alle Dateien im aktuellen Verzeichnis, die mit .txt enden. Folgende, beispielhafte Dateien, die gematcht werden können:

  • datei1.txt
  • notes.txt
  • README.txt
Beispiel
doc*

Dies matcht alle Dateien, deren Name mit doc beginnt, gefolgt von null oder mehr beliebigen Zeichen. Folgende Dateien können damit beispielhaft gematcht werden:

  • doc
  • document
  • doc123
  • doctor_notes.txt

Wenn man “ls *.txt” in der Shell eingibt, interpretiert die Shell dieses Muster und ersetzt “*.txt” durch alle Dateien im aktuellen Verzeichnis, die mit “.txt” enden. Das ist äußerst nützlich, um z.B. eine Liste von Dateien zu bearbeiten oder anzuzeigen, ohne jede Datei einzeln angeben zu müssen.

Fragezeichen (?)

Das Fragezeichen steht für genau ein beliebiges Zeichen.

Beispiel
data?.csv

Dies matcht alle Dateien, die mit data beginnen, gefolgt von genau einem weiteren Zeichen, und die auf .csv enden. Beispielhafte Dateien wären:

  • data1.csv
  • data2.csv
  • dataA.csv
  • dataNeu.csv
Beispiel
file_?.txt

Dies matcht Dateien wie file_1.txt oder file_A.txt, aber nicht file_10.txt oder file__.txt, da diese Muster zwei Zeichen enthalten, währen ? nur eines verlangt.

Eckige Klammern ([])

Eckige Klammern ([]) werden verwendet, um eine Zeichenkette zu definieren. Innerhalb der Klammern kann man eine Reihe von Zeichen angeben, und die Shell matcht ein beliebiges Zeichen aus dieser Mengen.

Beispiel
file[123].txt

Dies matcht Dateien wie file1.txt, file2.txt oder file3.txt.

Beispiel
data[ab].log

Dies matcht dataa.log oder datab.log.

Hierbei handelt es sich um eine sogenannte Zeichenkette. Wenn man zum Beispiel [123] verwendet, wird die Shell nach Dateien suchen, bei denen an dieser Stelle entweder 1, 2 oder 3 steht. Nützlich, wenn man eine Auswahl von Zeichen erlauben möchte.

Negation innerhalb von Klammern ([^]) oder ([!…])

Durch die Negation kann man Dateien ausschließen, die bestimmte Zeichen an einer Stelle enthalten. Das wird durch ein ! oder ein ^ am Anfang der Zeichenklasse ausgedrückt.

Beispiel
file[!a-c].txt

Dies matcht alle Dateien, die mit file beginnen, gefolgt von einem Zeichen, das nicht a, b oder c ist, und auf .txt enden. Beispielhafte Dateien, die matchen würden, wären in diesem Fall:

  • file1.txt
  • filed.txt
  • fileA.txt
Beispiel
doc[^0-9].txt

Dies matcht docA.txt oder docZ.txt, aber nicht doc1.txt oder doc5.txt.

Durch Negation kann man Muster angeben, die bestimmte Zeichen explizit ausschließen. Dies ist besonders praktisch, wenn man mit einer großen Menge von Dateien arbeitet und nur solche matchen möchte, die bestimmten Kriterien nicht entsprechen.

Geschweifte Klammern ()

Geschweifte Klammern werden verwendet, um mehrere Muster gleichzeitig zu spezifizieren. Dies ist nicht direkt Globbing, sondern wird als Brace Expansion bezeichnet, funktioniert aber nach einem ähnlichen Prinzip.

Beispiel
file{1,2,3}.txt

Dies expandiert zu file1.txt, file2.txt und file3.txt.

Beispiel
{*.txt,*.csv}

Dies matcht alle Dateien, die entweder mit .txt oder .csv enden.