So suchen und führen Sie Unterverzeichnisse per Shell-Skript aus

Dieser Beitrag zeigt eine Möglichkeit, Skripte in allen Unterverzeichnissen über ein Skript auszuführen. Dafür gibt es viele Anwendungsfälle. Ich verwende es, um das Stoppen/Erstellen/Starten beliebiger Docker-Container auf einem meiner Server zu automatisieren. Auf diese Weise kann ich automatisierte Serverwartungsjobs einrichten (z. B. über Jenkins) und alles starten, ohne zu wissen, was auf dem Server bereitgestellt wird.

Das Script

Das folgende Skript durchläuft alle Unterverzeichnisse und sucht nach stop.sh. Wenn es vorhanden ist, wird es ausgeführt, andernfalls meldet das Skript, dass das Skript nicht im Unterverzeichnis gefunden wurde.

#!/bin/bash
for d in $(find . -maxdepth 1 -type d)
do
    if [ $d !=  '.' ]
    then
      cd "$d"
      if [ -f "./stop.sh" ]
      then
        echo "---- --- Executing --- ----"
        sh "./stop.sh"
      else
        echo "---- stop.sh not found ----"
        pwd
      fi
      cd ..
    fi
done
  • Zeile 2: for-Schleife über alle vom Befehl find zurückgegebenen Einträge. In jeder Runde wird das Ergebnis der Variablen d (für Verzeichnis) zugewiesen. Der Befehl „find“ sucht nach allen Verzeichnissen (-type d) im aktuellen Verzeichnis (.) mit maximaler Tiefe 1 (nur eine Ebene tiefer). Dies kann natürlich geändert werden, um auch tiefer zu suchen, in diesem Fall müssen jedoch auch andere Teile des Skripts geändert werden.
  • Zeile 4: Das Skript sollte den Anker für das aktuelle Verzeichnis (dargestellt durch Punkt .) ignorieren.
  • Zeile 6: Betreten Sie das Unterverzeichnis mit cd.
  • Zeile 7: Wenn dieses Verzeichnis das Skript enthält, das wir in jedem Unterverzeichnis ausführen möchten (in diesem Fall stop.sh).
  • Zeile 9,10 Log und stop.sh ausführen.
  • Zeile 11,12,13 Wenn stop.sh nicht existiert, logge Verzeichnis/script nicht gefunden.
  • Zeile 15 Gehen Sie für die nächste Runde zurück zum übergeordneten Verzeichnis.

Ausführung

Das ist die Ausgabe bei einer Beispielausführung:

~/docker $ ./stop.sh 
---- stop.sh not found ----
/home/user1/docker/testapp
---- --- Executing --- ----
Stopping processor ... done
Removing processor ... done
Removing network processor_default
---- --- Executing --- ----
Stopping webapp ... done
Removing webapp ... done
Removing network webapp_default
~/docker $ 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert