ディレクトリ内の全てのSVGをEPSに一括変換するスクリプト(Inkspace)
用途
Inkscape を使って、指定したディレクトリ以下にあるすべての SVG ファイルを再帰的に探索し、同名の EPS ファイルに一括変換する。変換に成功した SVG は削除し、成功・失敗・削除数を最後にまとめて表示する。
動作概要
1. inkscape コマンドがインストールされているかを確認する。
見つからない場合はエラーメッセージを出して終了する。
2. 変換対象のディレクトリ(変数 TARGET_DIR)が存在するか確認する。
存在しなければエラーで終了する。
3. find コマンドで TARGET_DIR 以下から拡張子 .svg のファイルを再帰的にすべて数える。
ゼロなら何もせず終了する。
4. find で見つかった SVG ファイルを一つずつ処理する。
出力先 EPS のパスを .svg → .eps に置き換えて作る。
新しい Inkscape(inkscape input.svg --export-filename=output.eps ... 形式)で変換を試みる。
失敗した場合は古い Inkscape(inkscape -E output.eps input.svg ... 形式)で再度変換を試みる。
どちらかで成功したらカウンタを加算し、元の SVG ファイルを削除し、削除数カウンタも加算する。
両方失敗した場合は失敗カウンタを加算する。
5. 成功・失敗・削除した SVG の個数をまとめて表示する。
失敗が一つでもあればスクリプトの終了ステータスを 1 にする。
スクリプト
tomiokario.icon自環境で動作していたものをChatGPTで変換しました.動かなければ適宜調整してください
TARGET_DIR に相対パス(または絶対パス)を一箇所書き換えるだけで、任意のディレクトリ配下の SVG を再帰的に変換できるようにした版です。
TARGET_DIR="images" の部分を、例えば TARGET_DIR="figures" や TARGET_DIR="docs/assets" などに変更すれば、そのディレクトリ以下の SVG がすべて対象になります。
code:bash
#!/bin/bash
# 指定ディレクトリ以下のすべてのSVGファイルをEPSに変換するスクリプト (Inkscape版)
# ここを書き換えるだけで対象ディレクトリを変更できる
TARGET_DIR="images"
echo "SVGファイルをEPSに変換しています..."
echo "対象ディレクトリ: ${TARGET_DIR}"
echo
# Inkscapeがインストールされているか確認
if ! command -v inkscape &> /dev/null; then
echo "エラー: inkscapeコマンドが見つかりません。インストールしてください。"
exit 1
fi
# 対象ディレクトリが存在するか確認
if ! -d "$TARGET_DIR" ; then
echo "エラー: 指定ディレクトリが見つかりません: $TARGET_DIR"
exit 1
fi
# 対象ディレクトリ配下の全サブディレクトリでSVGファイルを検索
svg_count=$(find "$TARGET_DIR" -type f -name "*.svg" | wc -l)
if "$svg_count" -eq 0 ; then
echo "変換するSVGファイルが見つかりませんでした。"
exit 0
fi
echo "見つかったSVGファイル: ${svg_count}個"
echo
success=0
failed=0
deleted=0
# 対象ディレクトリ配下の全SVGファイルを処理
while IFS= read -r svg_file; do
# 念のため存在確認
if ! -f "$svg_file" ; then
continue
fi
eps_file="${svg_file%.svg}.eps"
echo "変換中: $svg_file -> $eps_file"
# Inkscapeを使用して変換
# --export-text-to-path: テキストを図形化して文字化け防止
# --export-area-drawing: 描画範囲に合わせて変換
if inkscape "$svg_file" \
--export-filename="$eps_file" \
--export-text-to-path \
--export-area-drawing \
2>/dev/null; then
echo " 成功 (現行バージョン)"
((success++))
rm "$svg_file"
echo " 削除: $svg_file"
((deleted++))
else
# Inkscape 1.0未満(古いバージョン)の場合の互換コマンド
if inkscape -E "$eps_file" --export-text-to-path "$svg_file" 2>/dev/null; then
echo " 成功 (旧バージョン互換)"
((success++))
rm "$svg_file"
echo " 削除: $svg_file"
((deleted++))
else
echo " 失敗"
((failed++))
fi
fi
done < <(find "$TARGET_DIR" -type f -name "*.svg")
echo
echo "----------------------------------------"
echo "変換完了: 成功 ${success}個, 失敗 ${failed}個"
echo "削除 : ${deleted}個のSVGファイルを削除しました"
echo "----------------------------------------"
if "$failed" -gt 0 ; then
exit 1
fi
関連
InkscapeでSVGをEPSに変換する方法(macOS・ターミナル)
CLIでSVGからEPSへの変換に失敗するときの対応手順(コマンドが長いが確実な方法)