Написание сценария bash для создания PNG из SVG с помощью Inkscape из каталога

Я очень новичок в написании сценариев bash, и я надеюсь, что кто-то может мне помочь с этой задачей.

У меня есть каталог, заполненный * .SVG-файлами, и я хочу, чтобы их конвертировать с помощью inkscape в PNG с помощью следующей команды:

inkscape -f FILENAME.svg -w WIDTH -h HEIGHT -e FILENAME.png

Сценарий также имеет параметр $ width и $ height. Если задан только один параметр, сценарий должен создать квадратное изображение, где $ width = $ height

Пример

Содержимое каталогов:

file1.svg
file2.svg
file3.svg

./batchscript.sh 1024 2000

Должно выполняться

inkscape -f file1.svg -w 1024 -h 2000 -e file1.png
inkscape -f file2.svg -w 1024 -h 2000 -e file2.png
inkscape -f file3.svg -w 1024 -h 2000 -e file3.png
./batchscript.sh 3000

Выполнять

inkscape -f file1.svg -w 3000 -h 3000 -e file1.png
inkscape -f file2.svg -w 3000 -h 3000 -e file2.png
inkscape -f file3.svg -w 3000 -h 3000 -e file3.png

Содержимое каталогов должно выглядеть следующим образом:

file1.svg
file1.png
file2.svg
file2.png
file3.svg
file3.png
1
задан 14 September 2014 в 19:49

2 ответа

Если у вас есть GNU Parallel, попробуйте это (на основе решения Letizia):

#!/bin/bash

if [ $# -eq 1 ]; then
   width=$1
   height=$1
else
  if [ $# -eq 2 ]; then
     width=$1
     height=$2
  else
     echo "Error: missing parameters!"
     echo "Usage: myscript.sh width [height]"
     exit 1
  fi
fi

parallel inkscape -f {} -w $width -h $height -e {.} ::: *.svg

Все новые компьютеры имеют несколько ядер, но большинство программ носят последовательный характер и поэтому не будут использовать несколько ядер. Тем не менее, многие задачи чрезвычайно распараллеливаются:

Запускать одну и ту же программу во многих файлах. Выполнить ту же программу для каждой строки в файле. Запустить ту же программу для каждого блока в файле

GNU Параллель - это общий параллелизатор и позволяет легко запускать задания параллельно на одном компьютере или на нескольких компьютерах, к которым у вас есть доступ к ssh.

Если у вас есть 32 разных задания, которые вы хотите запустить на 4 процессорах, Прямой способ распараллеливания состоит в том, чтобы запустить 8 заданий на каждом процессоре:

GNU Parallel вместо этого запускает новый процесс, когда заканчивается - сохранение активных процессоров и, следовательно, экономия времени:

Simple scheduling

Установка

Личная установка не требует доступа root. Это можно сделать за 10 секунд, выполнив следующее:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash

Для других параметров установки см. Http://git.savannah.gnu.org/cgit/parallel.git/tree/README[!d16 ]

Установка

Дополнительные примеры: http://git.savannah.gnu.org/cgit/parallel.git/tree/README ]

Смотрите видеоролики: https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

Пройдите через учебник: https://www.youtube .com / playlist? list = PL284C9FF2488BC6D1

Подпишитесь на список рассылки, чтобы получить поддержку: https://lists.gnu.org/mailman/listinfo/parallel

3
ответ дан 24 May 2018 в 03:42

Попробуйте следующее:

#!/bin/bash
if [ $# -eq 1 ]; then
   width=$1
   height=$1
else
  if [ $# -eq 2 ]; then
     width=$1
     height=$2
  else
     echo "Error: missing parameters!"
     echo "Usage: myscript.sh width [height]"
     exit 1
  fi
fi

ls *.svg | while read file
        do
           destFile=`echo $file | sed 's/\.svg/\.png/'`
           inkscape -f $file -w $width -h $height -e $destFile
        done
exit 0

Первый скрипт проверяет количество параметров и заданную переменную width и height или в случае отсутствия параметров выдает сообщение об ошибке и простую справку об использовании.

Предположим, что вы запускаете эту команду в каталоге, который содержит файл svg, и выполняет команду inkscape по мере необходимости.

2
ответ дан 24 May 2018 в 03:42

Другие вопросы по тегам:

Похожие вопросы: