• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Die Bildungsoffensive hier im Forum geht weiter! Jetzt sollen Kreativität und technische Möglichkeiten einen neue Dimension erreichen. Das Thema in diesem Monat lautet - Verkehrte Welt - Hier geht es lang --> Klick

Einige Kommandos in mehreren Verzeichnissen ausführen

commune10

Adams Apfel
Registriert
11.08.11
Beiträge
522
Ich befinde mich in einem Verzeichnis in dem sich weitere Verzeichnisse und Dateien befinden. Ich benötige ein Shell-Skript, das in all diesen Verzeichnissen (nicht rekursiv) ein paar Befehle ausführt. Hat jemand einen Tipp, wie ich das anstellen könnte. Alle meine bisherigen Versuche haben leider nicht funktioniert. Die Shell ist mir egal, bash, zsh, ...
 
Du könntest mit find alle Dateien im Verzeichnis suchen und dann deine Befehle darauf anwenden.
 
Code:
for fld in  /fldr/a  /fldr/sub/b  /fldr/sub/deeper/c ;
do
  pushd "$fld" >/dev/null;
    my_command_list;
  popd >/dev/null;
done;
 
@Phil: Mit find habe ich es schon probiert. Aus irgend einem Grund haben min- und maxdepth aber nicht die gewünschte Wirkung gezeigt. Dazu kommt, das dann noch die Liste der gefundenen Ordner abgearbeitet werden muss, sprich in jeden Ordner einmal rein um ein paar Kommandos auszuführen.

Beispiel:
$ tree
.
├── a3
├── aa/
├── bb/ii/
├── c6
├── cc/
├── dd/hh/
├── f1
├── f4
└── f5

Die Kommandos sollen in aa, bb, cc und dd ausgeführt werden. Die Dateien sollen ignoriert werden. ii/ und hh/ sollen ebenfalls ignoriert werden. Wenn ich die Ebene bis zu der das Skript laufen soll einstellen könnte wäre das natürlich schön, für den momentanen Anwendungsfall ist dies aber nicht nötig.

@Rastafari: Das Problem ist, das das Skript universell funktionieren soll. Wenn ich es immer im gleichen Dateibaum ausführen müsste würde ich es wohl auch so machen wie du es geschrieben hast. Die Namen und die Anzahl der Verzeichnisse ändert sich aber ständig. Wären die Namen vorher bekannt könnte man es z.B. auch so abkürzen: (cd /usr && ls; pwd; ls -lh)

So bleibt man im aktuellen Working Directory und führt die drei Kommandos im entfernten Ordner /usr aus.
 
Code:
for i in $(ls -d */) do
        cd $i
        # do something
        cd ..
done
 
  • Like
Reaktionen: commune10
Es ist irgendein Ordner, nennen wir ihn "hallo". Darin befindet sich z.B. die in Posting #4 angegebene Ordner/Dateistruktur. Es können wie im Beispiel vier Ordner (aa, bb, cc und dd) sein, es können aber auch 300 Ordner sein. Weder die Ordner noch die Dateien sind nach irgendeiem Schema benannt auf das ich einen Einfluß hätte. Ich möchte nun in den angegebenen vier Ordnern eine Reihe von Kommandos ausführen.

@wdominik: Zeile 2: Syntaxfehler beim unerwarteten Wort `cd'
 
Sorry, ich hätte es vorher testen sollen, dann wäre mir der Tippfehler aufgefallen. ;)