Macのターミナルから~/Desktop/imgsに入っている画像ファイルを、同一LAN内の別サーバーのImagemagickで画像形式を変換し、Macの~/Desktop/imgs_returnへ保存するシェルスクリプトを作成しました。
前提条件
- MacのターミナルからImagemagickが入ったサーバーへssh xxx でログイン可能であること。
- Macのデスクトップにimgsディレクトリ(~/Desktop/imgs)があること。
- Imagemagickのバージョンは7。6の場合、スクリプト中のmagickをconvertに変えると動くかも。
- 画像ファイル名に日本語を含んでいないこと。
img_conv.sh
/#!/bin/bash
# 変数設定
# Macのターミナルからimagemagickが入ったサーバーへsshでログインする際に指定するホスト名 ssh xxx のxxxの部分を指定
SEND_HOST="xxx"
# 引数チェックと初期値設定
# 引数チェック
if [ -z "$1" ]; then
echo "使用法: $0 <変換形式> <画像ディレクトリ> [<返却用ディレクトリ>]"
exit 1
fi
# ディレクトリの存在チェック
LOCAL_DIR=${2:-"/Users/$USER/Desktop/imgs"}
if [ ! -d "$LOCAL_DIR" ]; then
echo "エラー: 指定された画像ディレクトリ '$LOCAL_DIR' が存在しません。"
exit 1
fi
RETURN_DIR=${3:-"/Users/$USER/Desktop/imgs_return"}
if [ ! -d "$RETURN_DIR" ]; then
echo "警告: 返却用ディレクトリ '$RETURN_DIR' が存在しません。ディレクトリを作成します。"
mkdir -p $RETURN_DIR
fi
# 変換形式を小文字に統一
CONVERTED_FORMAT=$(echo "$1" | tr '[:upper:]' '[:lower:]')
CONVERTED_SUFFIX=".$CONVERTED_FORMAT"
echo "$CONVERTED_FORMAT に変換します"
echo "$LOCAL_DIR 変換前画像ファイルの場所"
echo "$RETURN_DIR 変換後画像ファイルの場所"
# 1. 画像ディレクトリ内の画像ファイルのみを取得(指定された形式以外)
FILES=$(ls ${LOCAL_DIR} | grep -E "\.(jpg|jpeg|png|gif|avif|heic)$" | grep -v -i "\.$CONVERTED_FORMAT$")
for FILE in $FILES; do
# ファイル名に日本語が含まれているかどうかをチェック
if echo "$FILE" | iconv -f UTF-8 -t ASCII//TRANSLIT &>/dev/null; then
base=$(echo "$FILE" | sed 's/\..*$//')
echo "処理中: $base.$1 < $FILE"
cat $LOCAL_DIR/$FILE | ssh $SEND_HOST "magick - $1:-" > $RETURN_DIR/$base.$1
else
echo "'$FILE' は日本語を含むため処理をスキップします。"
fi
done
# 全体の処理終了メッセージ
echo "全ファイルの処理が完了しました。"
img_conv.shに実行権限付与
chmod +x img_conv.sh
img_conv.sh使い方
画像ファイルを~/Desktop/imgsに入れます。
~/Desktop/imgsの中にある画像ファイルをpngに変換
./img_conv.sh png
~/Desktop/imgsの中にある画像ファイルをjpgに変換
./img_conv.sh jpg
~/Desktop/imgsの中にある画像ファイルをavifに変換/
./img_conv.sh avif
変換後の画像ファイルが~/Desktop/imgs_returnに保存されます。
変換後の画像ファイル保存場所を指定
~/Desktop/imgsの中にある画像ファイルをpngに変換。スクリプトと同じ場所に保存。
./img_conv.sh png "" .
~/Desktop/imgsの中にある画像ファイルをjpgに変換。スクリプトと同じ場所に保存。
./img_conv.sh jpg "" .
~/Desktop/imgsの中にある画像ファイルをavifに変換。スクリプトと同じ場所に保存。
./img_conv.sh avif "" .
行末の.を実在するディレクトリに変更することで、変換後の画像ファイルの保存先を指定できます。
変換前の画像ファイル保存場所を指定
スクリプトと同じ場所にある画像ファイルをpngに変換。
./img_conv.sh png . ""
スクリプトと同じ場所にある画像ファイルをjpgに変換。
./img_conv.sh jpg . ""
スクリプトと同じ場所にある画像ファイルをavifに変換。
./img_conv.sh avif . ""
変換後の画像ファイルが~/Desktop/imgs_returnに保存されます。

