• Apfeltalk ändert einen Teil seiner Allgemeinen Geschäftsbedingungen (AGB), das Löschen von Useraccounts betreffend.
    Näheres könnt Ihr hier nachlesen: AGB-Änderung
  • Viele hassen ihn, manche schwören auf ihn, wir aber möchten unbedingt sehen, welche Bilder Ihr vor Eurem geistigen Auge bzw. vor der Linse Eures iPhone oder iPad sehen könnt, wenn Ihr dieses Wort hört oder lest. Macht mit und beteiligt Euch an unserem Frühjahrsputz ---> 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, ...
 

Pill

Adams Parmäne
Registriert
07.07.12
Beiträge
1.310
Du könntest mit find alle Dateien im Verzeichnis suchen und dann deine Befehle darauf anwenden.
 

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
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;
 

commune10

Adams Apfel
Registriert
11.08.11
Beiträge
522
@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.
 

wdominik

Weißer Winterglockenapfel
Registriert
15.01.10
Beiträge
880
Code:
for i in $(ls -d */) do
        cd $i
        # do something
        cd ..
done
 
  • Like
Reaktionen: commune10

commune10

Adams Apfel
Registriert
11.08.11
Beiträge
522
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'
 

Rastafari

deaktivierter Benutzer
Registriert
10.03.05
Beiträge
18.150
Das "do" gehört auf eine neue Zeile - oder ein Semikolon davor.
 
  • Like
Reaktionen: commune10

wdominik

Weißer Winterglockenapfel
Registriert
15.01.10
Beiträge
880
Sorry, ich hätte es vorher testen sollen, dann wäre mir der Tippfehler aufgefallen. ;)