# Jokerzeichen

Vorab sei darauf hingewiesen, dass einige der hier vorgestellten Suchmuster nur in der bash funktionieren.

Um sich nur Dateien mit einem bestimmten Namensmuster anzuschauen, verwendet man so genannte Jokerzeichen (Wildcards). Bevor wir uns Beispielen zuwenden, listen wir die Möglichkeiten zur Suchmusterangabe auf:

Muster | Steht für...
`?` | Genau ein beliebiges Zeichen
`*` | Beliebig viele (auch 0) beliebige Zeichen
`[def]` | Eines der Zeichen
`[`^`czx]` | Keines der angegebenen Zeichen
`[!czx]` | Wie oben
`[a-f]` | Alle Zeichen aus dem Bereich
~ | Steht (meist) für das Heimatverzeichnis

## Beispiele

`user@sonne> ls /boot/*.map /boot/System.map user@sonne> ls -d /?[abc]* /sbin /var user@sonne> ls /?[abc]* /sbin: SuSEconfig fsck.minix ldconfig rmmod YaST genksyms lilo route ... /var: X11R6 cron lock named spool texfonts adm games log openwin squid tmp ...`

Betrachten wir folgendes Beispiel:

`user@sonne> rm -r *~`

Die Option `-r` weist das Kommando `rm` an, rekursiv in allen Unterverzeichnissen Backup-Dateien (Endung ~ ) zu löschen. Wir erwarten jetzt, dass tatsächlich auch in allen Unterverzeichnissen die Dateien entfernt wurden, stellen aber fest, dass dies nur im aktuellen Verzeichnis geschehen ist: Der Grund dafür ist die Shell, die für die Auflösung der Jokerzeichen verantwortlich ist. Die Shell betrachtet also nur `*~` und findet entsprechende Muster nur im aktuellen Verzeichnis. `rm` bekommt also nur eine Liste dieser Dateien!

Genau aus diesem Grund funktioniert in Linux (im Unterschied zu DOS) ein Kommando wie

`user@sonne> cp *.x *.y`

niemals. Die Shell expandiert zwar alle `*.x`, kann aber `*.y` nicht auflösen und übergibt dieses unverändert an das Kommando `cp`, welches damit aber nichts anzufangen vermag.