以前購入したファイル復元ソフト WonderShare Recoverit で復旧した画像。
かなり強力なデータ復元機能で壊れたHDDにある画像すべてを復元できた。
17万2411枚。200GBくらいある。
しかし、写真のファイル名は復元できないようで、復元画像名は数字の連番になっちゃう。
これじゃいつ撮った写真か分からない。写真のEXIF情報から日付を読み取って、ファイル名に付けたい。
EXIFを読めるツールがあればできる。今回はmacOS Mojave で行う。
使うツールはこれ。
"Under the Hood" of ExifTool
$ brew install exiftool
$ exiftool 画像名
とすれば EXIF情報が読み取れる。
exifに含まれる日付のうち、ファイルの作成日と思われる2行に着目。
$ exiftool 00000003.jpg
まずは Date/Time Original の行だけをgrepで取り出してみる。
$ exiftool 00000003.jpg | grep Time.*Original
うまくいった。
for文で複数のファイルに一括で同じgrepを行う。
$ for i in 0000001*jpg; do echo "$i"; exiftool "$i" | grep Time.*Original ; done
grepの部分を変数tempに入れて表示させてみる。
$ for i in 0000001*jpg; do temp=`echo "$i"; exiftool "$i" | grep Time.*Original` ; echo "$temp" ; done
awkで日付部分だけ切り出す。
$ for i in 0000001*jpg; do temp=`echo "$i"; exiftool "$i" | grep Time.*Original | awk '{print $4,$5}'`; echo "$temp" ; done
ドットをアンダーバーに変えてみる。
$ for i in 0000001*jpg; do temp=`echo "$i"; exiftool "$i" | grep Time.*Original | awk '{print $4,$5}' | sed -e s/":"/"_"/g`; echo $temp ; done
さらに、スペースをアンダーバーに変えてみる。
$ for i in 0000001*jpg; do temp=`echo "$i"; exiftool "$i" | grep Time.*Original | awk '{print $4,$5}' | sed -e s/":"/"_"/g | sed -e s/" "/"_"/g`; echo $temp ; done
問題は Date Time Original を持っていないファイル。例えば 00000012.jpg みたいな。
とりあえずスクリプトにする。
00000003.jpg Date/Time Original あり。Create Date あり。
00000012.jpg Date/Time Original なし。Create Date なし。
00000076.jpg Date/Time Original なし。Create Date あり。
Create Dateだけを使ってみるかな。