Seite 1 von 2 12 LetzteLetzte
Ergebnis 1 bis 10 von 11
  1. #1
    Rheinischer Krummstiel
    Themenstarter
    Avatar von commune10
    Registriert
    08.2011
    Beiträge
    387

    Einige Kommandos in mehreren Verzeichnissen ausführen

    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. #2
    Zabergäurenette Avatar von Pill
    Registriert
    07.2012
    Beiträge
    602
    Du könntest mit find alle Dateien im Verzeichnis suchen und dann deine Befehle darauf anwenden.

  3. #3
    Golden Noble Avatar von Rastafari
    Registriert
    03.2005
    Beiträge
    14.073
    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. #4
    Rheinischer Krummstiel
    Themenstarter
    Avatar von commune10
    Registriert
    08.2011
    Beiträge
    387
    @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. #5
    Niederhelfenschwiler Beeriapfel
    Registriert
    01.2010
    Beiträge
    840
    Code:
    for i in $(ls -d */) do
            cd $i
            # do something
            cd ..
    done

  6. Ein Benutzer fand diesen Beitrag hilfreich.

  7. #6
    Golden Noble Avatar von Rastafari
    Registriert
    03.2005
    Beiträge
    14.073
    Zitat Zitat von commune10 Beitrag anzeigen
    Wären die Namen vorher bekannt...
    Wäre vielleicht irgendwie hilfreich zu erwähnen, welche Ordner das denn sein sollen. D'accord?

  8. #7
    Rheinischer Krummstiel
    Themenstarter
    Avatar von commune10
    Registriert
    08.2011
    Beiträge
    387
    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'

  9. #8
    Golden Noble Avatar von Rastafari
    Registriert
    03.2005
    Beiträge
    14.073
    Das "do" gehört auf eine neue Zeile - oder ein Semikolon davor.

  10. #9
    Rheinischer Krummstiel
    Themenstarter
    Avatar von commune10
    Registriert
    08.2011
    Beiträge
    387
    Danke, jetzt funktionierts.

  11. #10
    Niederhelfenschwiler Beeriapfel
    Registriert
    01.2010
    Beiträge
    840
    Sorry, ich hätte es vorher testen sollen, dann wäre mir der Tippfehler aufgefallen.

Seite 1 von 2 12 LetzteLetzte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •