2017-03-08 2 views
1

Wenn ich das folgende DateiverzeichnisWie Sie einen Shell-Skript in mehreren Verzeichnissen ausführen, ohne einen Lauf Skript zu generieren, mit

/home/aero/airplane/case1 
/home/aero/airplane/case2 
.. 
/home/aero/airplane/casex (you get the point there could be many cases) 

ich einen Shell-Skript namens runscript.sh (auf dem gleichen Niveau aller habe die Fälle), die einige einfache Befehle ausführt. Ich möchte nicht manuell in jedes Verzeichnis "cd", um dann das Shell-Skript auszuführen. Gibt es eine Möglichkeit das Shell-Skript auf allen Fall Verzeichnisse auszuführen, die den Namen „Fall“ enthält, die durch etwas entlang der Linien von eingeben:

runscript.sh /case* 

Ich weiß, dass ich ein anderes Skript erzeugen kann, die dies tun könnte, aber ich bin frage mich, ob es eine Möglichkeit gibt, ein Skript in mehreren Verzeichnissen mit einem einfachen Befehl auszuführen?

Ihre Hilfe zu diesem wird sehr geschätzt!

Antwort

0

Wenn Sie wollen runscript.sh im subdir selbst auszuführen, wollen Sie etwas zur Vermeidung der Linien

cd case1 && runscript.sh && cd .. 
cd case2 && runscript.sh && cd .. 

Hier finden runscript.sh false zurück und Ihre cd .. können Sie an falschen Stellen bekommen.
Sie können dies vermeiden, indem Sie alles in einer Subshell ausführen.
Testen Sie dies, indem das Skript rscript.sh durch pwd ersetzt wird.

(cd case1 && pwd) 
(cd case2 && pwd) 

Jetzt wickeln Sie dies in einem Befehl ein, der alle Dirs findet, die mit "Fall" beginnen.

find case* -maxdepth 0 -type d -exec bash -c 'cd "{}"; pwd' \; 

Wenn Sie mit dem Ergebnis zufrieden sind, füllen Sie bitte das Skript

find case* -maxdepth 0 -type d -exec bash -c 'cd "{}"; ../runscript.sh' \; 
+0

Das funktioniert wie ein Zauber! Danke Walter! – user7649922

0

Verwenden Sie eine for Schleife. In diesem Beispiel müssen Sie den Befehl von/home/aero/airplane/ausführen.

for dir in `ls -ad case*`; do runscript.sh $dir/; done 
  • ls -ad case*: Liste nur Verzeichnisse mit "Fall" zu starten.
+0

Dies nicht zu arbeiten schien. Meine runscript.sh ruft ein Python-Skript auf, das eine Datendatei im Fallverzeichnis ändern soll, aber ich bekomme eine Fehlermeldung, dass die Datendatei nicht existiert. Die Datendatei existiert in diesem Verzeichnis. Es ist nichts falsch mit meinem rundcript.sh, denn wenn ich in das Case-Verzeichnis "cd" und dann mein Skript ausführen, funktioniert alles. – user7649922

Verwandte Themen