HOWTO zum Shell-Globbing (C) 2006 T.Birnthaler/H.Gottschalk OSTC GmbH, http://www.ostc.de $Id: shell-globbing-HOWTO.txt,v 1.4 2008-12-22 15:39:07 tsbirn Exp $ Dieses Dokument beschreibt die Shell-Dateinamen-Expansion ("Globbing"). ________________________________________________________________________________ Inhaltsverzeichnis 1) Globbing 2) Beispiele ________________________________________________________________________________ 1) Globbing ----------- 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*/ 2) Beispiele ----------- 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").