编写 bash 脚本以使用目录中的 Inkscape 从 SVG 创建 PNG

Rob*_*sse 2 scripts svg inkscape png

我对 bash 脚本非常陌生,我希望有人可以帮助我完成这项任务。

我有一个充满 *.SVG 文件的目录,我想使用以下命令将它们与 inkscape 批量转换为 PNG:

inkscape -f FILENAME.svg -w WIDTH -h HEIGHT -e FILENAME.png
Run Code Online (Sandbox Code Playgroud)

该脚本还有一个参数 $width 和 $height。如果只给出一个参数,脚本应创建一个方形图像,其中 $width=$height

例子

目录内容:

file1.svg
file2.svg
file3.svg

./batchscript.sh 1024 2000
Run Code Online (Sandbox Code Playgroud)

应该执行

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
Run Code Online (Sandbox Code Playgroud)
./batchscript.sh 3000
Run Code Online (Sandbox Code Playgroud)

应该执行

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
Run Code Online (Sandbox Code Playgroud)

之后目录内容应如下所示:

file1.svg
file1.png
file2.svg
file2.png
file3.svg
file3.png
Run Code Online (Sandbox Code Playgroud)

Ole*_*nge 5

如果你有 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
Run Code Online (Sandbox Code Playgroud)

所有新计算机都具有多个内核,但大多数程序本质上是串行的,因此不会使用多个内核。然而,许多任务是极其可并行化的:

  • 在许多文件上运行相同的程序
  • 对文件中的每一行运行相同的程序
  • 为文件中的每个块运行相同的程序

GNU Parallel 是一个通用并行器,可以轻松地在同一台计算机或多台您可以通过 ssh 访问的计算机上并行运行作业。

如果您想要在 4 个 CPU 上运行 32 个不同的作业,则并行化的直接方法是在每个 CPU 上运行 8 个作业:

简单的调度

相反,GNU Parallel 在完成后会生成一个新进程 - 保持 CPU 处于活动状态,从而节省时间:

GNU 并行调度

安装

个人安装不需要 root 访问权限。这样做可以在 10 秒内完成:

(wget -O - pi.dk/3 || curl pi.dk/3/ || fetch -o - http://pi.dk/3) | bash
Run Code Online (Sandbox Code Playgroud)

有关其他安装选项,请参阅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