Я являюсь очень новым для избиения сценариев, и я надеюсь, что кто-то может помочь мне с той задачей.
Мне заполнили каталог *.SVG-files, и я хочу к пакетному преобразованию их с 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
После некоторого исследования я сделал это ;)
Вот код для svg2png.sh
#!/bin/sh
# Saves all *.svg as *.png
# Check if SVG files are in this folder else exit
indir=$(ls -1 *.svg | wc -l)>/dev/null 2>&1;
if [ "$indir" -gt "0" ]
then
# Check if width-parameter is given else state an error and exit
if [ -z "$1" ]
then
echo 'Script usage: ./svg2png width [height]';
echo 'Where [height] is optional. If not given [height] = width';
exit;
>&2;
exit 1;
fi
# Check if height-parameter is given. If yes: $height=$height If not: $height=$width and process all *.svg-files in the directory.
if [ -z "$2" ]
then
#echo -en 'Processing file '$c' of '$indir'\e[5m...'
c="0";
for file in *.svg
do
/usr/bin/inkscape -z -f "${file}" -w $1 -h $1 -e "${file}.png" >/dev/null 2>&1;
echo -en "\r$i\e[0m";
echo -en 'Processing file '$c' of '$indir'\e[5m...'
((c = c + 1));
done
else
c="0";
for file in *.svg
do
/usr/bin/inkscape -z -f "${file}" -w $1 -h $2 -e "${file}.png" >/dev/null 2>&1;
echo -en "\r$i\e[0m";
echo -en 'Processing file '$c' of '$indir'\e[5m...'
((c = c + 1));
done
fi
# Output success message
echo -en "\r$i";
echo '\e[0m\e[1mSuccess: '$c' files have been processed!'
# When there are no SVG files to process abort script
else
echo -e "There are no SVG files to process. Aborting.";
fi
Если у Вас есть попытка Параллели GNU это (на основе решения 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
Все новые компьютеры имеют несколько ядер, но большинство программ последовательно по своей природе и не будет поэтому использовать несколько ядер. Однако много задач чрезвычайно parallelizeable:
, общий parallelizer и делает, легко выполнить задания параллельно на той же машине или на нескольких машинах, к которым у Вас есть ssh доступ.
, Если у Вас есть 32 различных задания, Вы хотите работать на 4 центральных процессорах, прямой способ параллелизировать состоит в том, чтобы выполнить 8 заданий на каждом ЦП:
Параллель GNU вместо этого порождает новый процесс, когда каждый заканчивает - хранение активных центральных процессоров и таким образом экономящее время:
Установка
А персональная установка не требует корневого доступа. Это может быть сделано через 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
Узнает больше
, Посмотрите больше примеров: http://www.gnu.org/software/parallel/man.html
Смотрит вводные ролики: https://www.youtube.com/playlist? Обход list=PL284C9FF2488BC6D1
через учебное руководство: http://www.gnu.org/software/parallel/parallel_tutorial.html
Регистрируется в почтовой рассылке для получения поддержки: https://lists.gnu.org/mailman/listinfo/parallel
Попробуйте это:
#!/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
команда, как Вам нужно.