Wie MS-DOS, so kennt auch die Shell verschiedene Jokerzeichen, mit denen sich Namensmuster von Dateiname erzeugen lassen. Im Unterschied zu MS-DOS liegt aber die Abarbeitung nicht in den Händen des jeweiligen Programms, sondern in denen der Shell selbst. Das heißt, die Shell ersetzt die Jokerzeichen bereits durch eine Liste der darauf passenden Dateinamen.

Fast alle Unix-Befehle können mehrere Dateien gleichzeitig verarbeiten, sie erwarten eben eine Liste von Dateinamen als Parameter. Wird jetzt ein Jokerzeichen statt einer Liste angegeben, so ersetzt die Shell das Jokerzeichen mit der Liste der passenden Dateinamen und übergibt dann diese Liste an das Programm. Das Programm selbst bekommt das Jokerzeichen also nie zu sehen.

Folgende Jokerzeichen stehen für die Dateinamen zur Verfügung:

*

Das Sternchen bedeutet, wie unter Dos, jede beliebige Zeichenkette, auch die leere Zeichenkette. Aber da der Punkt unter Unix keine Sonderbedeutung hat, ist das Sternchen alleine schon das Zeichen für alle Dateien im aktuellen Verzeichnis. Die unter Dos übliche Konstruktion *.* bedeutet unter Unix jede Datei, die irgendwo einen Punkt im Namen hat.

Im Gegensatz zu DOS kann das Sternchen beliebig oft in einem Suchmuster vorkommen. Die Konstruktion D*_*.* würde alle Dateien ansprechen, deren Namen mit einem D beginnt, die dann nach beliebig vielen (auch 0) beliebigen Zeichen einen Unterstrich im Namen vorweisen und dann wieder nach beliebig vielen beliebigen Zeichen einen Punkt, dem wieder beliebige Zeichen folgen dürfen.

?

Das Fragezeichen steht – wie unter DOS auch – für genau ein beliebiges Zeichen.

[…]

Eine in eckigen Klammern eingeschlossene Menge von Zeichen steht für genau ein Zeichen aus dieser Menge. Die Konstruktion [Dd]atei bedeutet also entweder Datei oder datei. Diese Zeichenmenge kann sehr hilfreich sein, weil damit ein sehr flexibler Umgang mit Dateinamen möglich ist. Um z.B. alle Dateien, die mit .gif oder .jpg enden anzusprechen kann geschrieben werden:

*.[gj][ip][fg]

Zugegebenermaßen würden auch Dateien, die auf .gpg enden hier mit angesprochen weden, aber wer hat schon solche Endungen…

Die Zeichenmenge in den eckigen Klammern kann entweder alle Zeichen direkt angeben wie etwa [abcd] für entweder a, oder b oder c oder d steht, sie kann aber auch in der Form [a-d] ausgedrückt werden. Das bedeutet alle Zeichen, die im Zeichensatz von a bis d stehen. [0-9] bedeutet also tatsächlich eine beliebige Ziffer.

Zusätzlich können auch mehrere solche „von bis“ Konstruktionen miteinander kombiniert werden. Um alle Dateien anzusprechen, die mit Buchstaben, groß oder Klein, beginnen kann man also schreiben [a-zA-Z]*

[!…]

Das gleiche Konstrukt der Zeichenmenge mit einem vorgestellten Ausrufungszeichen steht für ein Zeichen, das nicht in der Zeichenmenge vorkommt. [!a-z]* steht also für alle Dateien, außer denen, dessen erstes Zeiche im Namen ein Kleinbuchtabe ist.

Schreibe einen Kommentar