Oct 31, 2019
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
Edit this entry...
wikieditish message: Ready to edit this entry.
A quick preview will be rendered here when you click "Preview" button.