Mit foreach führen Sie eine Sequenz für jedes Element einer Liste aus (siehe Abschnitt „list"). Für jedes Element der selektierten Liste werden die Kind-Elemente von foreach als Sequenz ausgeführt.
Sie können festlegen, ob die Sequenzen nacheinander (in der Reihenfolge der Listenelemente) oder parallel ausgeführt werden.
Format
|
Attribute
Name | Wert | Bedeutung |
| string | Name eines gültigen Kontextobjekts vom Typ list. |
| string | Name des foreach Kontextobjekts, das den Wert des aktuellen Listenelements annimmt. Dies darf im foreach Kontext nicht definiert sein. Es wird implizit definiert. Der Typ des Kontextobjekts entspricht dem im Attribut selectType eingestellten Typ. |
|
| Der Standardwert ist sequential. |
|
| Filtert die Elemente des angegebenen Typs aus der Liste. Es wird nur über die gefilterten Elemente iteriert. |
|
| Der Standardwert ist forward. |
Beispiele
1. Dateien verteilen
|
Es werden die Dateien bin.mp3 und text.txt auf zwei Rechner kopiert.
Die Datei- und Rechnerlisten werden im Beispiel als Kontextobjekte definiert.
Die Dateiliste kann auch z.B. durch ein listDirectory definiert werden (siehe Abschnitt „listDirectory").
Es wird eine doppelte foreach Sequenz verwendet. Die äußere Sequenz durchläuft alle Rechner, die innere Sequenz durchläuft alle Dateien. Die Verbindung zu den Rechnern findet parallel statt, die Dateien werden ebenfalls parallel zu jedem Rechner übertragen.
autoDataSpec unterscheidet zwischen Text- und Binärdateien (siehe Abschnitt „autoDataSpec").
Wenn das Script ausgeführt ist, sind die Dateien auf alle Rechner verteilt.
Da im Beispiel kein faulthandler verwendet wurde, bricht das Script bei einem Fehler ab.
2. Dateibaum kopieren
|
Im Verzeichnis frg_eis_11 des Rechners UnixP_1 wird der Dateibaum *//* in das Verzeichnis frg_eis_11 der lokalen Kennung kopiert.
In der ersten foreach Sequenz werden alle (notwendigen) Verzeichnisse sequentiell mit createDirectory angelegt.
listDirectory liefert für das Verzeichnis frg_eis_11/a/b/c der Reihe nach die Verzeichnisse a, a/b und a/b/c (frg_eis_11 selbst ist mit baseDir als Basisverzeichnis definiert). Ein Verzeichnis kann erst angelegt werden, wenn das Eltern-Verzeichnis existiert.
In der zweiten foreach Sequenz werden die Dateien parallel kopiert, da nun alle Zielverzeichnisse vorhanden sind.
3. Dateibaum löschen
|
Im Beispiel wird unter der FTAC-Zugangsberechtigung FTACADM1 auf dem Rechner UnixP_1 alles im Verzeichnis frg_eis_10 gelöscht.
Mit listDirectory (siehe Abschnitt „listDirectory") werden durch das Suchmuster *//* alle Dateien und Verzeichnisse rekursiv ermittelt. Die Reihenfolge in der die Verzeichnisse aufgelistet werden, entspricht der zu deren Erzeugung notwendigen Reihenfolge (d.h. die umgekehrte Reihenfolge ist zum Löschen notwendig).
In der ersten foreach Sequenz werden alle Dateien parallel gelöscht. Nicht existierende Dateien werden ignoriert. Fehler beim Löschen einer Datei führen zum Abbruch des Scripts.
In der zweiten foreach Sequenz werden die leeren Verzeichnisse rückwärts gelöscht, weil die Verzeichnisse zum Löschen mit deleteDirectory leer sein müssen (siehe Abschnitt „deleteDirectory"). Nicht existierende Verzeichnisse werden ignoriert. Andere Fehler führen zum Abbruch des Scripts.
Wenn das Script ausgeführt ist, ist das Verzeichnis frg_eis_10 auf dem Rechner UnixP_1 leer.