Desempaquete todos los archivos en los subdirectorios y cámbieles el nombre a su directorio original

Desempaquete todos los archivos en los subdirectorios y cámbieles el nombre a su directorio original

Terminé en una situación extraña. Tengo 35 carpetas. El primero se llama 1, el segundo se llama 2, y así sucesivamente. En cada una de estas carpetas, hay 4 archivos. '1.png', '2.png', '3.png', '4.png'. En cada una de estas carpetas, deseo ejecutar "convertir *.png -append out.pdf", cambiar el nombre de cada 'out.pdf' según su directorio original (por ejemplo, 'out1.pdf' de la primera carpeta) y luego descomprimir cada una. pdf de su carpeta original. es posible? Probé bucles, pero todos los que probé parecen no estar de acuerdo con el sistema de nombres.

Respuesta1

Pruebe algo como esto:

#!/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

Este script es compatible con Posix y no requiere bash, de ahí el archivo #!/bin/sh.

El código entre paréntesis se ejecuta en un subshell, por lo que el cdcomando solo cambia el directorio hasta el paréntesis de cierre. La siguiente iteración del bucle comenzará en el directorio de trabajo original.

En su ejemplo, creo que la sintaxis convertes incorrecta. Convertir solo toma un archivo de entrada y, en su pregunta original, *.pngpasaría cuatro archivos de entrada. Quizás eso sea parte de tu problema.

información relacionada