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.
*.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
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.
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
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.
file[123].txt
Dies matcht Dateien wie file1.txt
, file2.txt
oder file3.txt
.
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.
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
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.
file{1,2,3}.txt
Dies expandiert zu file1.txt
, file2.txt
und file3.txt
.
{*.txt,*.csv}
Dies matcht alle Dateien, die entweder mit .txt
oder .csv
enden.