min117の日記

初期desireもち。趣味Mac,メインFedora,仕事xp。

macOS Mojave 大量の写真を日付順に一括整理する(exiftoolコマンド使用)

以前購入したファイル復元ソフト WonderShare Recoverit で復旧した画像。

min117.hatenablog.com

かなり強力なデータ復元機能で壊れたHDDにある画像すべてを復元できた

 

17万2411枚。200GBくらいある。

f:id:min117:20190323111555p:plain

 

しかし、写真のファイル名は復元できないようで、復元画像名は数字の連番になっちゃう。

f:id:min117:20190323111747p:plain

これじゃいつ撮った写真か分からない。写真のEXIF情報から日付を読み取って、ファイル名に付けたい。

 

EXIFを読めるツールがあればできる。今回はmacOS Mojave で行う。

 

 

 

使うツールはこれ。

"Under the Hood" of ExifTool

f:id:min117:20190323093510p:plain

sno.phy.queensu.ca

 

Macなのでbrewでインストール。

$ brew install exiftool
f:id:min117:20190323090637p:plain

$ exiftool 画像名

とすれば EXIF情報が読み取れる。 

 

exifに含まれる日付のうち、ファイルの作成日と思われる2行に着目。

$ exiftool 00000003.jpg

f:id:min117:20190323095551p:plain

まずは Date/Time Original の行だけをgrepで取り出してみる。

$ exiftool 00000003.jpg | grep Time.*Original

f:id:min117:20190323095634p:plain

うまくいった。

 

for文で複数のファイルに一括で同じgrepを行う。

$ for i in 0000001*jpg; do echo "$i"; exiftool "$i" | grep Time.*Original ; done

f:id:min117:20190323095649p:plain

 

grepの部分を変数tempに入れて表示させてみる。

$ for i in 0000001*jpg; do temp=`echo "$i"; exiftool "$i" | grep Time.*Original` ; echo "$temp" ; done

f:id:min117:20190323095735p:plain

 

awkで日付部分だけ切り出す。

$ for i in 0000001*jpg; do temp=`echo "$i"; exiftool "$i" | grep Time.*Original | awk '{print $4,$5}'`; echo "$temp" ; done

f:id:min117:20190323095906p:plain

 

ドットをアンダーバーに変えてみる。

$ 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

f:id:min117:20190323100004p:plain

 

さらに、スペースをアンダーバーに変えてみる。

$ 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

f:id:min117:20190323100147p:plain

問題は Date Time Original を持っていないファイル。例えば 00000012.jpg みたいな。

 

とりあえずスクリプトにする。

f:id:min117:20190323110149p:plain

 

00000003.jpg Date/Time Original あり。Create Date あり

00000012.jpg Date/Time Original なし。Create Date なし

00000076.jpg Date/Time Original なし。Create Date あり

f:id:min117:20190323110732p:plain

Create Dateだけを使ってみるかな。

 

min117.hatenablog.com