Распакуйте все файлы в подкаталоги и переименуйте их в соответствии с их исходным каталогом

Распакуйте все файлы в подкаталоги и переименуйте их в соответствии с их исходным каталогом

Я оказался в странной ситуации. У меня 35 папок. Первая называется 1, вторая — 2 и так далее. В каждой из этих папок по 4 файла. «1.png», «2.png», «3.png», «4.png». В каждой из этих папок я хочу запустить «convert *.png -append out.pdf» и переименовать каждый «out.pdf» в соответствии с его исходным каталогом (например, «out1.pdf» из первой папки), а затем распаковать каждый pdf из его исходной папки. Возможно ли это? Я пробовал циклы, но все, что я пробовал, похоже, не согласуется с системой именования.

решение1

Попробуйте что-то вроде этого:

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

Этот скрипт совместим с POSIX и не требует bash, отсюда и #!/bin/sh.

Код между скобками выполняется в подоболочке, поэтому cdкоманда изменяет каталог только до закрывающей скобки. Следующая итерация цикла начнется в исходном рабочем каталоге.

В вашем примере, я думаю, синтаксис для convertневерен. Convert принимает только один входной файл, а в вашем исходном вопросе он *.pngпередал бы четыре входных файла. Возможно, это часть вашей проблемы.

Связанный контент