Entpacken Sie alle Dateien in Unterverzeichnissen und benennen Sie sie nach ihrem ursprünglichen Verzeichnis um

Entpacken Sie alle Dateien in Unterverzeichnissen und benennen Sie sie nach ihrem ursprünglichen Verzeichnis um

Ich bin in einer merkwürdigen Situation gelandet. Ich habe 35 Ordner. Der erste heißt 1, der zweite 2 und so weiter. In jedem dieser Ordner befinden sich 4 Dateien. „1.png“, „2.png“, „3.png“, „4.png“. In jedem dieser Ordner möchte ich „convert *.png -append out.pdf“ ausführen und jede „out.pdf“ nach ihrem ursprünglichen Verzeichnis umbenennen (z. B. „out1.pdf“ aus dem ersten Ordner) und dann jede PDF-Datei aus ihrem ursprünglichen Ordner entpacken. Ist das möglich? Ich habe es mit Schleifen versucht, aber alles, was ich versucht habe, scheint mit dem Benennungssystem nicht übereinzustimmen.

Antwort1

Versuchen Sie etwas wie Folgendes:

#!/bin/sh

for dir in $(seq 1 35)
do
    (
         cd $dir || exit 1
         rm -f out$dir.pdf
         for n in 1 2 3 4
         do
             convert $n.png -append out$dir.pdf  || exit 2
         done
    )
done

Dieses Skript ist POSIX-kompatibel und erfordert kein bash, daher das #!/bin/sh.

Der Code zwischen den Klammern wird in einer Subshell ausgeführt, sodass der cdBefehl das Verzeichnis nur bis zur schließenden Klammer ändert. Die nächste Iteration der Schleife beginnt im ursprünglichen Arbeitsverzeichnis.

Ich denke, in Ihrem Beispiel convertist die Syntax für falsch. Convert nimmt nur eine Eingabedatei an, und in Ihrer ursprünglichen Frage *.pngwürde das vier Eingabedateien übergeben. Vielleicht ist das ein Teil Ihres Problems.

verwandte Informationen