デジタルカメラやメモリカード、iPhoneなどから、まったりと「イメージキャプチャ」で OSX 上に画像を取り込み、Exif.Photo.DateTimeOriginal の値に従ってファイル名を変更するための Automator 用シェルスクリプト。まったりと手抜きで書いてみたところ。
2010年7月10日14時20分40秒に撮影された DSC_0035.JPG を 20100710_142040_DSC_0035.JPG にするイメージで。
最初は exiftool を叩いていたんやけど、数百枚の画像取り込みとかだとリネームが卒倒しそうなくらい遅すぎるので、MacPorts 使って exiv2 を入れることに。シェルスクリプトから叩く程度の安直さであれば、まあこの辺りが手をかける限界かなと。
手元のマシンが G4 MDD Dual なので Leopard どまり。ということで Xcode 3.1.4 をとってきて入れたのちに sudo port install exiv2 で準備完了。
# exiv2 は MacPorts で入れてるので path を追加
export PATH=${PATH}:/opt/local/bin
# exiv2 が見つからなければ終了
if ! which exiv2 2>&1 > /dev/null ; then
exit 1
fi
for f in "$@"; do
# EXIF にキー Exif.Photo.DateTimeOriginal が含まれている場合のみ
if exiv2 -Pk "${f}" | grep -q Exif.Photo.DateTimeOriginal ; then
DIR=$(dirname "${f}")
ORIG_FILE=$(basename "${f}")
# 既に日付がファイル名に含まれている場合はいったん削除
NEW_FILE=$(echo "${ORIG_FILE}" | sed "s/\([0-9]\{8\}_\)\([0-9]\{6\}_\)*//")
if [ "${ORIG_FILE}" != "${NEW_FILE}" ] ; then
if [ -f "${DIR}/${NEW_FILE}" ]; then
mv -f "${DIR}/${NEW_FILE}" "${DIR}/backup_${NEW_FILE}"
fi
mv -f "${DIR}/${ORIG_FILE}" "${DIR}/${NEW_FILE}"
fi
# EXIF データに基づいてファイル名を変更
exiv2 -r'%Y%m%d_%H%M%S_:basename:' rename "${DIR}/${NEW_FILE}"
fi
done
Automator ワークフロー上で「写真をダウンロード」の代わりに「選択された Finder 項目を取得」にすれば、既にディスク上に取り込んでいる画像ファイルのリネームにも使えます (が、肝心の「選択された Finder 項目を取得」自体が激遅なので、素直に Terminal からスクリプトを実行するのがいいかと)。
いまどきはファイル名なんかは気にせずに、Picasa などで閲覧・管理というのが主流なんでしょうが、まあなんとなく。適当に手抜きで。
![[Automator bash script] [Automator bash script]](http://microgroove.jp/shaolin/img/automator.jpg)
