Einige Kommandos in mehreren Verzeichnissen ausführen

Dieses Thema im Forum "Unix & Terminal" wurde erstellt von commune10, 05.12.12.

  1. commune10

    commune10 Süssreinette (Aargauer Herrenapfel)

    Dabei seit:
    11.08.11
    Beiträge:
    522
    Zustimmungen:
    15
    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, ...
  2. Pill

    Pill Strauwalds neue Goldparmäne

    Dabei seit:
    07.07.12
    Beiträge:
    1.056
    Zustimmungen:
    64
    Du könntest mit find alle Dateien im Verzeichnis suchen und dann deine Befehle darauf anwenden.
  3. Rastafari

    Rastafari Beauty of Kent

    Dabei seit:
    10.03.05
    Beiträge:
    15.484
    Zustimmungen:
    1.100
    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;
  4. commune10

    commune10 Süssreinette (Aargauer Herrenapfel)

    Dabei seit:
    11.08.11
    Beiträge:
    522
    Zustimmungen:
    15
    @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.
  5. wdominik

    wdominik Friedberger Bohnapfel

    Dabei seit:
    15.01.10
    Beiträge:
    872
    Zustimmungen:
    58
    Code:
    for i in $(ls -d */) do
            cd $i
            # do something
            cd ..
    done
    commune10 gefällt das.
  6. Rastafari

    Rastafari Beauty of Kent

    Dabei seit:
    10.03.05
    Beiträge:
    15.484
    Zustimmungen:
    1.100
    Wäre vielleicht irgendwie hilfreich zu erwähnen, welche Ordner das denn sein sollen. D'accord?
  7. commune10

    commune10 Süssreinette (Aargauer Herrenapfel)

    Dabei seit:
    11.08.11
    Beiträge:
    522
    Zustimmungen:
    15
    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'
  8. Rastafari

    Rastafari Beauty of Kent

    Dabei seit:
    10.03.05
    Beiträge:
    15.484
    Zustimmungen:
    1.100
    Das "do" gehört auf eine neue Zeile - oder ein Semikolon davor.
    commune10 gefällt das.
  9. commune10

    commune10 Süssreinette (Aargauer Herrenapfel)

    Dabei seit:
    11.08.11
    Beiträge:
    522
    Zustimmungen:
    15
    Danke, jetzt funktionierts.
  10. wdominik

    wdominik Friedberger Bohnapfel

    Dabei seit:
    15.01.10
    Beiträge:
    872
    Zustimmungen:
    58
    Sorry, ich hätte es vorher testen sollen, dann wäre mir der Tippfehler aufgefallen. ;)
  11. commune10

    commune10 Süssreinette (Aargauer Herrenapfel)

    Dabei seit:
    11.08.11
    Beiträge:
    522
    Zustimmungen:
    15
    Kein Problem, alles okay!

Diese Seite empfehlen