Descompacte todos os arquivos em subdiretórios e renomeie-os de acordo com o diretório original

Descompacte todos os arquivos em subdiretórios e renomeie-os de acordo com o diretório original

Acabei em uma situação estranha. Eu tenho 35 pastas. O primeiro é denominado 1, o segundo é denominado 2 e assim por diante. Em cada uma dessas pastas, existem 4 arquivos. '1.png', '2.png', '3.png', '4.png'. Em cada uma dessas pastas, desejo executar "convert *.png -append out.pdf" e renomear cada 'out.pdf' após seu diretório original (por exemplo, 'out1.pdf' da primeira pasta) e depois descompactar cada pdf de sua pasta original. Isso é possível? Eu tentei loops, mas tudo o que tentei parece discordar do sistema de nomenclatura.

Responder1

Tente algo assim:

#!/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 é compatível com posix e não requer bash, daí o #!/bin/sh.

O código entre parênteses é executado em um subshell, portanto o cdcomando só altera o diretório até o parêntese de fechamento. A próxima iteração do loop começará no diretório de trabalho original.

No seu exemplo, acho que a sintaxe convertestá incorreta. O Convert leva apenas um arquivo de entrada e, na sua pergunta original, *.pngpassaria quatro arquivos de entrada. Talvez isso seja parte do seu problema.

informação relacionada