|
Metazeichen zur Expansion von Dateinamen
Damit man beim Angeben von z. B. Dateinamen nicht alle Namen eintippen
muß, sondern die Dateien auch alle oder nach bestimmten Kriterienauswählen kann, gibt es Metazeichen (Jokerzeichen, Wildcards). ImGegensatz zu anderen Systemen (z. B. MS-DOS) werden diese von der Shellersetzt. Dies ist eine ganz wichtige Tatsache, die zur Folge hat, daßnahezu jedes UNIX-Kommando als Dateiangabe immer eine (im Rahmen der BS-Parameter)beliebige Menge von Dateien als Parameter haben kann. Im Programm sinddaher auch keine Systemaufrufe nötig, die auf die Verzeichnisinformationzugreifen; es wird lediglich eine Schleife benötigt, welche die einzelnenDateien nacheinander bearbeitet. Metazeichen sind Zeichen mit erweiterterBedeutung. Die Shell ersetzt die Metazeichen durch alle Dateinamen des
aktuellen Verzeichnisses, die auf das Muster passen. Dabei können die
Metazeichen beliebig oft an beliebiger Stelle im Dateinamen stehen
(z. B.: *abc*def*). Es gibt folgende Metazeichen:
* |
Der Stern steht für eine beliebige Zeichenfolge - oder für
überhaupt kein Zeichen. Dazu ein Beispiel:
"ab*" steht für alle Dateinamen, die mit "ab" anfangen, auch für
"ab" selbst ("ab", "abc", "abcd", "abxyz", usw.). |
? |
Das Fragezeichen steht für genau ein beliebiges
Zeichen. Zum Beispiel:
"?bc" steht für alle Dateinamen mit 3 Zeichen, die auf "bc" enden
("abc", "bbc", "1bc", "vbc", "xbc", usw.), nicht jedoch für "bc". |
[ ] |
Die eckige Klammer wird ersetzt durch eines der in
der Klammer stehenden Zeichen. Auch ein Bereich ist möglich, z. B.
[a-k] = [abcdefghijk]. Beispiel: "a[bcd]" wird ersetzt durch "ab", "ac" und "ad".
Soll das Minuszeichen selbst in die Zeichenmenge aufgenommen werden, muß es
an erster Stelle stehen (gleich nach der öffnenden Klammer). |
[! ] |
Die eckige Klammer mit Ausrufezeichen wird ersetzt durch
eines der nicht in der Klammer stehenden Zeichen, zum Beispiel:
"[!abc]" wird ersetzt durch ein beliebiges Zeichen außer a, b oder c.
Soll das Ausrufezeichen selbst in die Zeichenmenge aufgenommen werden, muß es
an letzter Stelle stehen. |
\ |
Der Backslash hebt den Ersetzungsmechanismus für das folgende Zeichen auf. Beispiel:
"ab\?cd" wird zu "ab?cd" - das Fragezeichen wird übernommen. Wichtig:
Bei der Umleitung von Ein- und Ausgabe werden Metazeichen in den Dateinamen hinter dem
Umleitungszeichen nicht ersetzt. |
Beispiele für die Anwendung:
ls -l a*
listet alle Dateien, die mit "a" anfangen
ls test?
listet alle Dateien die mit "test" anfangen
und 5 Zeichen lang sind ("test1", "test2", "testa")
ls /dev/tty1[1-9]
listet alle Terminalbezeichnungen mit einer 1 in der Zehnerstelle ("tty11", "tty12",
... , "tty19")
Lebenswichtig:
Der * ist ein gefährliches Zeichen, Tippfehler könne
zum Fiasko führen, wenn aus Versehen ein Leerzeichen zuviel getippt
wird.
rm a* löscht beispielsweise alle Dateien, die mit "a" anfangen.
rm a * löscht dagegen erst die Datei "a" und dann alle Dateien
im Verzeichnis.
Anmerkungen:
- Der Punkt am Anfang von Dateinamen stellt eine Ausnahme dar, er muß
explizit angegeben werden (wegen der Verzeichnisreferenzen "." bzw.
".." und der Tatsache, daß Dateien, die mit einem Punkt beginnen,
normalerweise nicht angezeigt werden).
- Der "\"am Zeilenende unterdrückt auch das Return-Zeichen
- das Kommando kann in der folgenden Zeile fortgesetzt werden (es erscheint
dann der Prompt ">" anstelle von "$").
|
|
|