Я оказался в странной ситуации. У меня 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
передал бы четыре входных файла. Возможно, это часть вашей проблемы.