デジタルカメラやメモリカード、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 などで閲覧・管理というのが主流なんでしょうが、まあなんとなく。適当に手抜きで。