Führen Sie den Befehlssatz in jedem Unterverzeichnis aus

Führen Sie den Befehlssatz in jedem Unterverzeichnis aus

Ich habe die folgenden Befehle, die ich in jedem Unterverzeichnis des aktuellen Arbeitsverzeichnisses ausführen möchte. Hier sind die Befehle:

OUTPUTFN=`basename $PWD`
cat *.xml > $OUTPUTFN.txt
mv $OUTPUTFN.txt $OUTPUTFN.xml
mv $OUTPUTFN.xml ..

In diesem Verzeichnis gibt es über 700 Ordner. Ich möchte, dass es in jeden Ordner geht, diese vier Befehle ausführt und dann zum nächsten geht, die Befehle ausführt und das Ganze wiederholt. Ich habe versucht, mehrere Beispiele von dieser Site mit meinen Befehlen zu kombinieren, aber es funktioniert nicht.

Antwort1

Skript

for DIR in *; do
    [ -d "$DIR" ] && cat "$DIR"/*.xml > "$DIR.xml"
done

Einzeiler

for DIR in *; do [ -d "$DIR" ] && cat "$DIR"/*.xml > "$DIR.xml"; done

Wie es funktioniert

  • Bash wird *auf alle Dateien und Verzeichnisse im aktuellen Verzeichnis erweitert.

  • for DIR in *; do ... donegeht diese durch und führt sie ...für jeden aus.

    Enthält jeweils $DIRden Namen des aktuellen Eintrags.

  • [ -d "$DIR" ] && ...prüft, ob $DIRes sich tatsächlich um ein Verzeichnis (und nicht um eine Datei) handelt.

    Wenn dies der Fall ist, ...wird es ausgeführt.

  • cat "$DIR"/*.xml > "$DIR.xml"tut genau das, was Ihre vier Codezeilen tun.

verwandte Informationen