Schleife über eine Reihe von Dateien aus der Shell

Shell-Skripts sind leistungsfähig, da alles, was von der Shell aus ausgeführt werden kann, in einem Shell-Skript ausgeführt werden kann. Ebenso ist Funktionalität, die normalerweise nur in Shell-Skripts wie Schleifen und Bedingungen zu sehen ist, ein faires Spiel, das direkt in die Shell eingegeben wird. Das Durchlaufen einer Gruppe von Dateien mithilfe einer for-Schleife ist ein einfaches Beispiel.


Wenn sich in einem Verzeichnis mehrere gzip-Archive befinden und Sie diese in separate Verzeichnisse extrahieren möchten, ist das Looping von der Shell eine Lösung. Zum Beispiel existieren file1.tar.gzip und file2.tgz und sollen in die Verzeichnisse file1.tar.gzip.dir und file2.tgz.dir entpackt werden. Wenn Sie eine Bourne-Shell (sh, ksh, zsh, bash) verwenden, verwenden Sie die folgenden Befehle in der Befehlszeile. (Nachdem Sie am Ende jeder Zeile die Eingabetaste gedrückt haben, ändert die Shell die Eingabeaufforderung in>, um Sie darauf hinzuweisen, dass noch mehr erwartet wird.):

für eine Datei in * gz
> tun
> mkdir $ file.dir
> (cd $ file.dir; gzip -dc $ file | tar xf -)
> fertig

Wenn Sie die Befehle cd und gzip / tar in Klammern einschließen, wirkt sich die Verzeichnisänderung nur auf die Befehle gzip / tar aus, nicht auf nachfolgende.

Ein anderes Beispiel zeigt, wie eine Datei erstellt wird, die aus dem Inhalt einer Reihe von Dateien (z. B. Protokolldateien) besteht, die nach ihrem letzten Änderungsdatum sortiert sind. Um eine Datei biglog zu erstellen, die aus allen Dateien im aktuellen Verzeichnis nach Datum sortiert besteht, verwenden Sie Folgendes:

für x in 'ls -tr * .log'
> tun
> cat $ x >> biglog
> fertig

Der Befehl ls -tr * .log listet alle Dateien mit der Endung .log in chronologischer Reihenfolge auf. Dieser Befehl ist in "besondere Anführungszeichen" eingeschlossen, nicht in den "üblichen einfachen Anführungszeichen", die dazu führen, dass der Befehl ausgeführt und seine Ausgabe zur Verwendung wie eine Variable an die Shell zurückgegeben wird. Die biglog-Datei muss leer sein oder gelöscht werden, bevor diese Befehle ausgeführt werden.