如何使用Inkscape CLI模式处理20k SVG文件? (对齐和合并对象)

时间:2014-10-26 11:20:23

标签: bash optimization svg inkscape

基于模板生成~2万个文件。这些文件包含2个对象:

  1. 中文字符(hanzi);
  2. 其发音(pinyin)。
  3. 这部分工作得很好,然后我来:

    • hanzi左对齐;
    • pinyin对齐
    • 合并hanzipinyin
      • 这意味着首先从<svg:text>转换为<svg:path>

    使用以下选项:

    inkscape -f file.svg \
      --select=hanzi --verb=AlignHorizontalLeft --verb=EditDeselect \
      --select=pinyin --verb=AlignHorizontalRight --verb=EditDeselect \
      --select=hanzi --select=pinyin \
      --verb=AlignVerticalCenter --verb=SelectionUnion \
      --verb=FileSave --verb=FileQuit
    

    节流是我打开/关闭Inkscape每个文件

    N.B。:我正在使用Inkscape 0.48.4 r9939(2014年1月22日)

    问题

    1. 有没有办法在一个Inkscape实例中处理多个文件?
    2. Align*动词的替代方法是什么,因为它们在inkscape --verbs-list中不可用?
    3. 参考

1 个答案:

答案 0 :(得分:1)

我根本不知道Inkscape,但我认为你的问题是它太慢了 - 尽管你没有明确说明。无论如何,您可以尝试这样GNU Parallel

parallel -j 8 ./process {} ::: *.svg

这将保持8个作业并行运行,直到处理完所有20,000个文件。 {}是文件名的简写,文件名列表是在:::之后给出的。如果您的命令行中也有文件,则可以在stdin

上以这样的形式提供这些文件
find . -name "*.svg" | parallel -j 8 ./process {}

然后,您将Inkscape命令包装在名为process的脚本中并使其可执行(使用chmod +x process)并使其采用单个参数 - 即文件名。

我想无论如何都值得一试 - 使用一个小的COPIED样本文件夹,直到你对GNU Parallel有信心。