이 질문 에서이 작업을 수행하는 방법을 찾았습니다. 잉크 스케이프-명령 행 / 터미널을 통해 페이지 중심으로 그리기
편집 할 이미지로 "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
그러나이 두 번째 명령은 많은 창을 열어 너무 많은 이미지를 편집하면 컴퓨터가 충돌합니다. 들어 리눅스 만 이 명령은 잘 작동합니다 :
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 파일이 편집됩니다.