HOWTO zum Shell-Globbing
(C) 2006 T.Birnthaler/H.Gottschalk <howtos(at)ostc.de>
OSTC GmbH, www.ostc.de
Version 1.4 (22.12.2008)
Dieses Dokument beschreibt die Shell-Dateinamen-Expansion ("Globbing").
1) Globbing
2) Beispiele
Um an ein Kommando Dateinamen zu übergeben, kann entweder die Liste der
Dateinamen vollständig angegeben werden. Oder es werden über "Suchmuster"
(Pattern) alle Dateinamen herausgesucht, die dazu "passen".
Die Shell expandiert zuerst die Suchmuster zu einer Liste von passenden
Dateinamen ("filename globbing"), setzt diese dann anstelle der Suchmuster
ein und führt schließlich das Kommando aus (d.h. das Kommando "sieht" die
Suchmuster nicht!).
Dateinamen mit führendem Punkt ("versteckte Dateien") werden nur dann gefunden,
wenn der Punkt explizit angegeben wird (Achtung: Die Verzeichnisse "." und
".." beginnen ebenfalls mit einem Punkt!).
Folgende "Metazeichen" können zur Angabe von Suchmustern verwendet werden:
| Metazeichen | Bedeutung |
+---------------+----------------------------------------------------------+
| ? | Genau ein beliebiges Zeichen |
| * | 0 oder mehr beliebige Zeichen |
| \x | Das Metazeichen x selbst (der Backslash quotiert) |
| [abc] [a-z] | Genau ein Zeichen aus der angegebenen Menge |
| [!abc] [!a-z] | Genau ein Zeichen NICHT aus der angegebenen Menge (sh) |
| [^abc] [^a-z] | Genau ein Zeichen NICHT aus der angegebenen Menge (csh) |
| ~ | Home-Verzeichnis des aktuellen Benutzers |
| ~USER | Home-Verzeichnis des Benutzers USER |
| {abc,def,...} | Liste der angegebenen Zeichenketten (csh, ksh, bash) |
| / | Verzeichnistrenner |
+---------------+----------------------------------------------------------+
Die Metazeichen können beliebig zu Suchmustern zusammengesetzt werden, alle
passenden Datei- und/oder Verzeichnisnamen müssen das Suchmuster vollständig
erfüllen. Eine Längenbeschränkung oder eine Beschränkung in der Anzahl der
verwendeten Metazeichen gibt es nicht. Die sich ergebende Kommandozeile ist
allerdings in der Länge beschränkt (z.B. 2 Mio Zeichen bei der bash).
Es können auch Muster für ganze Dateipfade (Verzeichnis + Dateiname) angegeben
werden:
ls /*/a*/
Immer "ls -d" oder "echo" voransetzen:
a* Dateinamen mit "a" am Anfang (auch "a")
*a ... mit "a" am Ende (auch "a")
*a* ... mit mind. einem "a" darin (auch "a")
*a*a* ... mit mind. zwei "a" darin (auch "aa")
*aa* ... mit mind. zwei "a" direkt hintereinander darin (auch "aa")
[a-z][a-z] Kleingeschriebene zweibuchstabige ...
*[0-9]*[0-9]* ... mit mind. zwei Ziffern darin (nicht "0".."9")
*a*e*i*o*u* ... mit mind. 5 Vokalen in angegebener Reihenfolge
? Einbuchstabige ...
?? Zweibuchstabige ...
?a? ... mit 3 Buchstaben und "a" als zweitem Buchstaben
*.c ... mit Endung ".c"
/*/*.c ... mit Endung ".c" in Unterverz. des Root-Verz.
/*/*/*.c ... mit Endung ".c" in Unter-Unterverz. des Root-Verz.
*.[ch] ... die auf ".c" oder ".h" enden
*[!.][!ch] ... die als vorletztes Zeichen nicht "." und als
letztes nicht "c" oder "h" haben (z.B. "a.", ".b", "aa")
*.{c,h,sh} ... die auf ".c", ".h" oder ".sh" enden
*.[ch] *.sh analog
.[!.]* Versteckte ... (aber nicht "." und "..")
Das Verzeichnis "/usr/bin" eignet sich aufgrund der vielen darin enthaltenen
Dateien sehr gut zum Ausprobieren der Suchmuster. Die Angabe der Option "-d"
[directory] verhindert bei "ls" das Auflisten des INHALTS von Verzeichnissen,
es wird nur der Verzeichnisname ausgegeben (Beispiel: "X11" in "/bin").