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

1 ответ1

0

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

#!/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 неверен. Преобразование занимает только один входной файл, и в исходном вопросе *.png пропустит четыре входных файла. Возможно, это часть вашей проблемы.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .