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 |
user@sonne> ls /boot/*.map
|
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.