ฉันพบวิธีการทำสิ่งนี้ในคำถามนี้: Inkscape - Center Drawing to Page ผ่าน Command Line / Terminal
ด้วย "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
แต่คำสั่งที่สองนี้จะเปิดหน้าต่างเป็นตันซึ่งจะทำให้คอมพิวเตอร์ของคุณเสียหายหากคุณกำลังแก้ไขภาพมากเกินไป สำหรับLinux เท่านั้นคำสั่งนี้จะทำงานได้ดีขึ้น:
for img in $(ls *.svg) ; do inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit $img ; done
สำหรับคำสั่งข้างต้นหากไฟล์ใด ๆ เป็น symlink, Inkscape จะแก้ไขไฟล์เป้าหมายที่ symlink ชี้ไป หากคุณไม่ต้องการให้ Inkscape ทำเช่นนี้คุณสามารถกรอง symlink ใด ๆ ด้วยคำสั่งนี้:
for img in $(ls *.svg) ; do if [[ $(readlink $img) == "" ]] ; then inkscape --verb=EditSelectAll --verb=AlignHorizontalCenter --verb=AlignVerticalCenter --verb=FileSave --verb=FileQuit $img ; fi ; done
ในขณะที่ฉันอยู่ที่นี่ฉันก็อาจโพสต์สคริปต์ทุบตีที่ฉันทำเพื่อสิ่งนี้:
#!/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 ในไดเรกทอรีนั้น