この質問でこれを行う方法を見つけました:Inkscape-コマンドライン/ターミナルを介してページに中央に描画する
「foo.svg」を編集する画像として:
inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit foo.svg
現在のディレクトリ内のすべてのsvg画像を編集するには:
inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileClose *.svg
しかし、この2番目のコマンドは多数のウィンドウを開き、編集している画像が多すぎるとコンピューターがクラッシュします。以下のためのLinuxのみ、このコマンドでは、より良い仕事になります。
for img in $(ls *.svg) ; do inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit $img ; done
上記のコマンドでは、ファイルのいずれかがシンボリックリンクである場合、Inkscapeはシンボリックリンクが指すターゲットファイルを編集します。Inkscapeでこれを実行したくない場合は、次のコマンドを使用してシンボリックリンクを除外できます。
for img in $(ls *.svg) ; do if [[ $(readlink $img) == "" ]] ; then inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit $img ; fi ; done
私がそれに取り組んでいる間、私はこのために作成したbashスクリプトを投稿することもできます。
#!/bin/bash
# inkscape-center <file-or-directory>...
_analyse() {
if [ -d "${1}" ] ; then
_centerAll "${1}" ;
else
_center "${1}" ;
fi
}
_centerAll() {
cd "${1}" ;
for img in $(ls "*.svg") ; do
_filterSyms "${img}" ;
done
}
_filterSyms() {
if [[ $(readlink "${1}") == "" ]] ; then
_center "${1}"
fi
}
_center() {
inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit "${1}"
}
for arg ; do
_analyse "${arg}" ;
done
私はそれを呼んだ inkscape-center
、次のように実行します:
inkscape-center <file-or-directory>
必要なだけ引数をとるので、次のようなことができます。
inkscape-center 1st.svg 2nd.svg 3rd.svg 4th.svg
注意 -ファイルではなくディレクトリを指定すると、そのディレクトリ内のすべてのsvgファイルが編集されます。