Teil 4: Grundkurs bash
- Grundkurs bash
- Teil 2: Grundkurs bash
- Teil 3: Grundkurs bash
- Teil 4: Grundkurs bash
Druckerfehlerkorrektur: find . -type f -exec ls {} ;
funktioniert natürlich nicht. Korrekt muss es heißen:
find . -type f -exec ls '{}' ';' |
Einige Kommandos haben Optionen, mit denen man ihre Wirkung auf alle untergeordneten Verzeichnisse ausweiten kann (z.B. gibt ls mit dem Parameter -R auch alle untergeordneten Verzeichnisse an: ls -R).
Leider gibt es diese Option nicht bei allen Shell-Kommandos, und oft will man die Wirkung auch auf bestimmte Dateiarten einschränken (z.B. nur auf normale Dateien, nur auf Verzeichnisse, oder man will Links von der Behandlung ausschliessen). Die Lösung sieht so aus:
find . -type f -exec ls '{}' ';'
Als Kommando haben wir ls, also "Verzeichnis auflisten", gewählt, weil man damit schadlos
experimentieren kann. Für den Ernstfalls ersetzen Sie ls durch den von Ihnen gewünschten Befehl.
Das f steht hier für "nur normale Dateien" (es werde in unserem Beispiel also nur normale Dateien, aber keine Verzeichnisse oder Gerätedateien ausgegeben). Wenn Sie z.B. nur Verzeichnisse behandeln möchten, sieht die Sache so aus:
find . -type d -exec ls '{}' ';'
Wenn Sie Verzeichnisse ausschliessen wollen (das ! bedeutet soviel wie "nicht"):
find . ! -type d -exec ls '{}' ';'
Ein ganz wesentlicher Anwendungsfall ist das Ausschliessen von symbolischen Links (wenn Sie in einem
Unterverzeichnis z.B. einen symbolische Link auf / stehen haben, werden Sie nicht immer wollen, dass der Befehl wirklich auf den vollständigen Verzeichnisbaum angewandt wird):
find . ! -type l -exec ls '{}' ';'
Das l steht hier für symbolische Links - zusammen mit dem ! bedeutet es: symbolische Links von der Bearbeitung ausschliessen.
Hier hier noch die vollständige Liste für den type-Parameter:
f
normale Dateien
d
Verzeichnisse
l
symbolische Links
s
Socket
p
benannte Pipeline (FiFo)
b
gepufferte Gerätedatei für ein blockorientiertes Gerät
c
ungepufferte Gerätedatei für ein zeichenorientiertes Gerät
Weitere Optionen von find erfahren Sie, wenn Sie auf der Konsole
man find eingeben.
Oliver Müller/dln