Springe zum Hauptinhalt

Archiv
next up previous contents
Next: Shell-Scripts Up: Bourne-Shell als Kommando- und Previous: Pipelineverarbeitung

Filenamengenerierung

  • Verwendung von Metazeichen zur Bezeichnung einer Gruppe von
    Filenamen bei der Angabe von Filenamen-Argumenten

    (Begriffe: Filenamengenerierung, pattern matching, wild-cards (Joker))

  • Metazeichen und ihre Bedeutung
    * repräsentiert jede Zeichenkette einschließlich der leeren Zeichenkette
      (Zeichenkette mit der Länge 0)
    ? repräsentiert ein beliebiges Zeichen
    [ Beginn einer Zeichenklassenangabe
    ] Abschluß einer Zeichenklassenangabe
    - Zeigt eine lexikographisch geordnete Zeichenklasse an
  • Beispiele:


    im aktuellen Verzeichnis befinden sich die Files

    kap01.tex
    kap01.dvi
    kap02.tex
    kap02.dvi
    kap03.tex
    kap03.dvi
    kap04.tex
    kap04.dvi
    kap05.tex
    kap05.dvi
    prog.c
    prog.o
    prog1.c
    sort
    
    $ ls *                 -> alle Files
    
    $ ls kap*              -> kap01.tex, kap01.dvi, kap02.tex, kap02.dvi,
                              kap03.tex, kap03.dvi, kap04.tex, kap04.dvi,
                              kap05.tex, kap05.dvi
    
    $ ls *.c               -> prog.c, prog1.c
    
    $ ls kap*.tex          -> kap01.tex, kap02.tex, kap03.tex, kap04.tex, kap05.tex
    
    $ ls kap04.tex*        -> kap04.tex
    
    $ ls kap04.tex?        -> nichts
    
    $ ls ?????????         -> kap01.tex, kap01.dvi, kap02.tex, kap02.dvi,
                              kap03.tex, kap03.dvi, kap04.tex, kap04.dvi,
                              kap05.tex, kap05.dvi
    
    $ ls kap0[123]*        -> kap01.tex, kap01.dvi, kap02.tex, kap02.dvi,
                              kap03.tex, kap03.dvi
    
    $ ls kap0[1-3]*        -> kap01.tex, kap01.dvi, kap02.tex, kap02.dvi,
                              kap03.tex, kap03.dvi
    
    $ ls kap0[1-9].dvi     -> kap01.dvi, kap02.dvi, kap03.dvi, kap04.dvi, kap05.dvi
    
    $ ls kap0[1-12].tex    -> kap01.tex, kap02.tex
    
    $ ls *.[a-d]*          -> kap01.dvi, kap02.dvi, kap03.dvi, kap04.dvi,
                              kap05.dvi, prog.c, prog1.c
    
  • Bemerkungen:
    • trifft natürlich für alle Kommandos zu
    • Beispiel: cc *.c
    • Problem: Anzahl der Kapitel übersteigt 9, z.B. 12
      kap0[6-9].tex kap1[0-2].tex  $\Rightarrow$ kap06.tex bis kap12.tex
    • Problem: Metazeichen sind selbst im Filenamen enthalten $\Rightarrow$ ,,Flüchten`` der Sonderbedeutung mittels $\backslash$
    • Beispiel: Filter, die auf * enden, können durch das Muster *$\backslash$* ,,adressiert`` werden
    • Testen der Effekte der Filenamengenerierung durch das Kommando echo:
    • Beispiel:
      $ echo rm kap0[1-3].dvi
         rm kap01.dvi kap02.dvi kap03.dvi