Home

制作

|

Published

|

4 min read

画像や動画ファイルを日付形式にリネームする(Mac)

img of 画像や動画ファイルを日付形式にリネームする(Mac)

前提

大量の画像や動画ファイルを整理する際、ファイル名を撮影日時にリネームしておくと便利だ。

探せばそういうことをしてくれるフリーソフトもあるのだろうが、ここではMacのターミナルより実行する、いわゆるコマンドラインツールを作ってみる。

料理でもなんでもそうだが、自分で作るのが一番安心。

環境

MacBook Air 15インチ
M3 2024 macOS 14.4.1(23E224)Sonoma
ターミナルソフト: iTerm2

準備

以下すべてターミナルでの話。

ExifTool導入

ターミナルよりExifToolをインストール。
(当然にインストール済みであれば不要)

   brew install exiftool

シェルスクリプトの作成(bash)

新規にテキストファイルを作成、以下のように記入し、保存。
ここでファイル名は仮に「img2rename.sh」とする。

リネーム後の日付ファイル名の形式は「2024.04.18-18.17.36.jpg」のようになる。
これは適宜お好みで変更のこと。

   #!/bin/bash
shopt -s nullglob

NC="\033[0m" # No Color (通常のターミナルカラー)
GREEN="\033[0;32m"
CYAN="\033[0;36m"
RED="\033[0;31m"

total=$(ls *.{jpg,JPG,jpeg,JPEG,png,PNG,mov,MOV,mp4,MP4,mpeg4,MPEG4} 2> /dev/null | wc -l | xargs)
count=0

for file in *.{jpg,JPG,jpeg,JPEG,png,PNG,mov,MOV,mp4,MP4,mpeg4,MPEG4}; do
    # 撮影日時をExif情報から取得(動画ファイルにも対応)
    datetime=$(exiftool -m -DateTimeOriginal -d "%Y.%m.%d-%H.%M.%S" "$file" | awk -F': ' '{print $2}')

    # 撮影日時が取得できない場合はファイルの最終変更日時を使用
    if [ -z "$datetime" ]; then
        datetime=$(date -r "$file" +"%Y.%m.%d-%H.%M.%S")
    fi

    extension="${file##*.}"
    case "$extension" in
        jpg|jpeg|JPG|JPEG)
            newext="jpg"
            ;;
        png|PNG)
            newext="png"
            ;;
        mov|MOV)
            newext="mov"
            ;;
        mp4|MP4|mpeg4|MPEG4)
            newext="mp4"
            ;;
    esac

    base_name="${datetime}.${newext}"
    newname="$base_name"
    counter=2

    # ファイル名が既に存在する場合は連番を付ける
    while [ -f "$newname" ]; do
        newname="${datetime}_${counter}.${newext}"
        let counter+=1
    done

    mv "$file" "$newname"
    let count+=1

    percent=$((100*count/total))

    printf "\r${GREEN}["
    filled=$((percent/2))
    for ((i=0; i<filled; i++)); do
        printf "#"
    done
    for ((i=filled; i<50; i++)); do
        printf " "
    done
    printf "] ${percent}%% (${count}/${total})${NC}\n${CYAN}Renamed to: $newname${NC}\n"
done

if [ "$count" -eq 0 ]; then
    echo -e "${RED}No image or video files were processed. Please check your files and try again.${NC}"
else
    echo -e "\n${GREEN}Renaming process completed. $count files were renamed.${NC}"
    echo -e "${CYAN}Just gave your files a new identity.${NC}"
fi

実行権限付与

   chmod +x img2rename.sh

ファイル移動

   sudo mv img2rename.sh /usr/local/bin/

使用方法

変換したい画像ファイルがまとまっているディレクトリに移動し、ターミナルで実行。

   img2rename.sh

すると以下のように表示される。

  • 画像ファイルがなければその旨を。
  • 画像ファイルがあればリネーム実行しその進捗状況を。
  • 画像ファイルのリネームが完了したら終わったよと。 実行の様子

正常に実行完了すれば、画像ファイルそのものの名前が変わっていることだろう。

結果

これで毎回リネーム方法に悩むこともなくなる。

画像をフォルダにまとめて、そこで「img2rename.sh」を実行するのみ。

ExifToolはいいぞ。

次回予告

同じようなやり方で画像サイズ縮小ツールを作る。