2019/10/31
exif 情報を利用した画像の整理スクリプト
iPhone で撮影した画像を macOS 標準の イメージキャプチャ などを利用して Mac に取りこんだ後、
exif 情報を参照して画像ファイルを整理するスクリプトです。
利用するためには exiftool が必要となりますので、Homebrew または MacPorts を利用して導入して下さい。
macOS 10.14.6 (Mojave) での動作を確認していますが、exiftool 以外は POSIX に準拠したコマンドしか使っていないので、
exiftool さえ準備できれば他のバージョンの macOS はもちろん、FreeBSD や Linux 上でも稼働すると思います。
1#!/bin/sh 2# 検索する exif タグ 3tag="DateTimeOriginal ModifyDate CreateDate" 4 5# 生成する画像ファイル名に追加する文字列 6id="_iOS" 7 8# 画像ファイル格納先ディレクトリ 9base=${HOME}/CameraFiles 10picture="Pictures" 11movie="Movies" 12unknown="Unknown" 13 14# 15# exif 情報から画像の作成日を取得 16# $1: ファイル 17# 18getDate() 19{ 20 21 local _t _d 22 23 for _t in ${tag} 24 do 25 _d=$(exiftool -${_t} "${1}") 26 if [ -n "${_d}" ] 27 then 28 echo ${_d} | awk '{ print $(NF-1), $(NF)}' | sed -e 's/:/ /g' -e 's/\..*//g' 29 return 30 fi 31 done 32 33} 34 35# 36# 格納先のファイル名を生成 37# ファイル名は ${base}/TYPE/YYYY/MM/YYYYMMDD_HHMMSSXXX_iOS.EXT の形式 38# XXX は 000 から 999 までを自動で採番する 39# $1: 格納先ディレクトリ 40# $2: 日付 (YYYYMMDD) 41# $3: 時間 (YYYYMMDD) 42# 43getName() 44{ 45 46 local _n _nn 47 48 _n=1 49 50 while [ ${_n} -le 999 ] 51 do 52 _nn=$(printf "%03d" ${_n}) 53 if ls "${1}/${2}_${3}${_nn}${id}"* > /dev/null 2>&1 54 then 55 _n=$((_n + 1)) 56 else 57 break 58 fi 59 done 60 61 echo "${1}/${2}_${3}${_nn}${id}" 62 63} 64 65# 66# メイン処理 67# 68ls -1 *jpg *png *mov | while read i 69do 70 # ファイルの拡張子取得 71 ext="${i##*.}" 72 73 # 拡張子でサブディレクトリを指定 74 if [ "${ext"} = "mov" ] 75 then 76 type="${movie}" 77 else 78 type="${picture}" 79 fi 80 81 # exif 情報から作成日を取得 82 set -- $(getDate "${i}") 83 year=${1} 84 month=${2} 85 day=${3} 86 time=${4}${5}${6} 87 88 if [ -n "${year}" ] 89 then 90 # 作成日が取得できた場合 91 dst="${base}/${type}/${year}/${month}" 92 name="$(getName "${dst}" "${year}${month}${day}" "${time}").${ext}" 93 else 94 # 作成日が取得できない場合 95 dst="${base}/${type}/${unknown}" 96 name="${dst}/${i}" 97 fi 98 99 # 格納先ディレクトリ作成 100 mkdir -p "${dst}" 101 # ファイル格納 102 cp "${i}" "${name}" 103done
トラックバック
https://blog.bsdhack.org/index.cgi/Computer/20191031.trackback