制作
|
Published
|
4 min read
画像や動画ファイルを日付形式にリネームする(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はいいぞ。
次回予告
同じようなやり方で画像サイズ縮小ツールを作る。