Wildcards unter UNIX

Willemers Informatik-Ecke

Die Shell löst Wildcards auf

Will man mehrere Dateien als Argumente für einen UNIX-Befehl verwenden, kann man sie meist einfach aufzählen. Die meisten Kommandozeilenprogramme sind unter UNIX so geschrieben, dass sie beliebig viele Dateien als Argumente akzeptieren. Um die Aufzählung zu vereinfachen, kann man mit Hilfe einer Maske mehrere Dateien zusammenfassen. Die Shell sucht die auf die Maske passenden Dateien zusammen und übergibt sie als Liste dem aufgerufenen Programm.

Wildcards: *, ? und die eckigen Klammern

Stern

Um Dateien mit ähnlichen Namen zu ermitteln, wird meist der Stern als Platzhalter verwandt. Dieser steht als Ersatz für beliebig viele beliebige Zeichen. An der Stelle des Sterns kann auch gar kein Zeichen sein. Die folgende Liste zeigt einige Beispiele:

Fragezeichen

Soll eine genaue Anzahl von Buchstaben freigehalten werden, benutzt man das Fragezeichen. Es steht für genau einen Buchstaben. M??s steht also für Maus, Mais oder Muks. Murks würde nicht passen, da die drei Buchstaben zwischen M und s nicht auf die zwei Fragezeichen passen. Auch eine Kombination aus Fragezeichen und Sternen macht Sinn. Wenn man beispielsweise alle Dateien und Verzeichnisse, die mit einem Punkt beginnnen löschen möchte,1) sollte man lieber nicht rm -r .* eingeben. Da der Stern auch die leere Zeichenkette symbolisiert, würde damit das aktuelle und das Elternverzeichnis ausgeräumt. Das Elternverzeichnis ist das davor liegende Verzeichnis und wird mit .. angesprochen. Besser ist da der Gedanke mit rm -r .??* zu arbeiten. Damit werden dann weder . noch .. getroffen, da beide nicht aus drei Zeichen bestehen. Allerdings würde auch die Datei .ab stehen bleiben.

Eckige Klammern

Neben diesen bekannten Wildcards gibt es noch die Möglichkeit mit den rechteckigen Klammern für ein Zeichen gewisse Alternativen zu verwenden. Beispielsweise bedeutet [Mm]akefile, dass die Datei makefile oder Makefile heißen kann. Die Datei [A-Z][0-9]?* muss mit einem Großbuchstaben beginnen, darauf muss eine Ziffer folgen und sie muss mindestens aus drei Zeichen bestehen.

Sonderzeichen als Parameter

Will man ein Zeichen an ein Programm geben, das von der Shell interpretiert wird, muss es davor geschützt werden. Dies kann bei einzelnen Zeichen durch Voranstellen eines Backslash (\) erfolgen. Die deutsche Übersetzung von Backslash hieße "rückwärtiger Schrägstrich". \* steht für einen Stern, \? für ein Fragezeichen im Namen. Man sollte, um Mißverständnisse zu vermeiden, jedoch diese Zeichen in Dateinamen besser nicht benutzen.

Alternativ kann das Argument auch in Anführungszeichen (") oder Hochkommata (') gesetzt werden. In diesem Fall interpretiert die Shell nicht die Sonderzeichen, sondern reicht sie so direkt an das aufgerufene Programm weiter.2)


1 Es ist übrigens keine gute Idee, diese Dateien aus dem Heimatverzeichnis löschen zu wollen. Sollten Sie es gerade getan haben, vergessen Sie, wo sie das gelesen haben.
2 Der Unterschied zwischen beiden ist, dass in Anführungszeichen Variablen noch aufgelöst werden, in Hochkommata nicht.

Diese Seite basiert auf Inhalten aus dem Buch Arnold Willemer: Wie werde ich UNIX-Guru
Verlagsrechte bei galileo computing


Homepage (C) Copyright 2002 Arnold Willemer