macOS使用しています。フォルダ内にjpgファイルが500個ぐらい入っています。ファイルサイズが大きいものがあるので、フルHDより大きいものはフルHDにリサイズして元ファイルは別フォルダに移動したい。サンプルをお願いします。

macOS標準のコマンド sips を使用したシェルスクリプトで、ご要望の動作を自動化できます。 

以下のスクリプトは、1920px(または1080px)を超える画像のみをフルHDにリサイズし、元の大きなファイルは originals フォルダへ移動します。 

サンプルスクリプト

デスクトップなどに resize_images.sh という名前で保存して使用してください。 

bash

#!/bin/bash

# 元ファイルを退避するフォルダ名
ORIGINAL_DIR="originals"
mkdir -p "$ORIGINAL_DIR"

# フォルダ内のjpgファイルをループ処理
for file in *.jpg *.JPG *.jpeg; do
    # ファイルが存在しない場合はスキップ
    [ -e "$file" ] || continue

    # 画像の幅と高さを取得
    width=$(sips -g pixelWidth "$file" | awk '/pixelWidth/ {print $2}')
    height=$(sips -g pixelHeight "$file" | awk '/pixelHeight/ {print $2}')

    # 幅が1920より大きい、または高さが1080より大きいか判定
    if [ "$width" -gt 1920 ] || [ "$height" -gt 1080 ]; then
        echo "Processing: $file (${width}x${height})"
        
        # 元ファイルをoriginalsフォルダに移動(バックアップ)
        mv "$file" "$ORIGINAL_DIR/"
        
        # originalsフォルダに移動した元ファイルを元に、フルHDサイズ(長辺1920)でリサイズ
        # -Z はアスペクト比を維持して指定ピクセル内に収めるオプション
        sips -Z 1920 "$ORIGINAL_DIR/$file" --out "$file"
    else
        echo "Skipped (Small enough): $file (${width}x${height})"
    fi
done

echo "完了しました。"

使い方

  1. ターミナルを起動します。
  2. 対象の画像が入っているフォルダに移動します。
    • cd /path/to/your/folder (フォルダをターミナルにドラッグ&ドロップするとパスが入力されます)
  3. 上記のスクリプトをコピーして実行するか、保存したファイルを実行します。
    • 直接実行する場合:上記コードをコピーしてターミナルに貼り付け、Enterキーを押します。
    • ファイルとして実行する場合:sh resize_images.sh と入力します。 

ポイント

  • sipsコマンド: macOS標準搭載のため、追加インストールは不要です。
  • アスペクト比維持-Z 1920 を使うことで、横長なら幅1920px、縦長なら高さ1920pxに収まるよう自動調整されます。
  • 安全設計: 最初に mv で元ファイルを別フォルダに移してからリサイズを実行するため、上書きミスを防げます。 

処理したいファイルの拡張子(.JPGや.jpegなど)が混在している場合でも、スクリプト内のループ対象に含まれているため一括で処理可能です。 

このスクリプトを特定のフォルダ名に合わせて調整したり、リサイズ後の画質を指定したりしますか?

画質調整は不要ですが、フォルダ名を変えて実行したいです。

フォルダ名をスクリプトの冒頭で簡単に変更できるように書き換えました。

SAVE_DIR の値を好きな名前に変えて実行してください。

修正版スクリプト

bash

#!/bin/bash

# --- 設定:元ファイルを移動させるフォルダ名 ---
SAVE_DIR="バックアップ用フォルダ"
# ------------------------------------------

mkdir -p "$SAVE_DIR"

for file in *.jpg *.JPG *.jpeg; do
    [ -e "$file" ] || continue

    # 画像のサイズを取得
    width=$(sips -g pixelWidth "$file" | awk '/pixelWidth/ {print $2}')
    height=$(sips -g pixelHeight "$file" | awk '/pixelHeight/ {print $2}')

    # フルHD(1920x1080)を超えているか判定
    if [ "$width" -gt 1920 ] || [ "$height" -gt 1080 ]; then
        echo "リサイズ中: $file"
        
        # 1. 元ファイルを指定のフォルダへ移動
        mv "$file" "$SAVE_DIR/"
        
        # 2. 移動した元ファイルを読み込み、現在の場所にリサイズ版を出力
        # -Z 1920 は長辺を1920pxに合わせます
        sips -Z 1920 "$SAVE_DIR/$file" --out "$file" > /dev/null
    else
        echo "スキップ(サイズ内): $file"
    fi
done

echo "--- 完了しました。元ファイルは '$SAVE_DIR' 内にあります ---"

変更方法

  1. 4行目の SAVE_DIR="バックアップ用フォルダ" のダブルクォーテーションの中身を、お好みの名前に書き換えてください。
  2. あとは先ほどと同様に、ターミナルで対象フォルダに移動して実行するだけです。

補足sips コマンドの仕様上、-Z 1920 を指定すると「縦長画像」の場合は高さが1920pxになります。もし「縦長であっても高さは1080pxに抑えたい」といった厳密な制限が必要であれば調整可能です。現状のままで進めてよろしいでしょうか?