クロスプラットフォームで使えるツールソフトに「exiftool」があります。これ、便利ですよね。
対応しているフォーマットはたくさんあり、中でも写真画像や加工画像といったExifデータが正しくあれば取り扱えます。
写真もスクリーンショットも何万と大量にある中、バックアップするのに年月でフォルダ分けさせました。
コマンドで使う方法です。
コマンドで使うexiftool
基本はコマンドでの実行です。オプションの指定は豊富にあるので、一見すると難しいものですが、すべての機能を使うわけではありません。
Exifデータを基に、ファイル名を変更するなどが一般的でしょうか。
今回は、年月でのフォルダ分けだけで使います。
メディアが入っているフォルダ(images)の上位ディレクトリ(backup_img)内で実行しました。
├── backup_img
├── 2021
├── 2022
├── 2023
├── 2024
├── images
場所(Path)は気を付けてください。
コマンドを実行する階層に年月のフォルダを作成してくれます。そう。存在しない場合は新規で作成してくれて、同名であればその中に入れられるから便利です。
肝心のフォルダ分けするコマンドは、基本の書式が次の通りです。
exiftool "-Directory < DateTimeOriginal" -d "%Y/%m/%d" DIR
後半の-dオプションで指定している”%Y/%m/%d”がフォルダ名(年月日)、最後のDIRというのがターゲットになるディレクトリです。
取得判別させるExifデータ
そもそも、Exifの項目が画像によってどうなっているのか知りたいため、情報は見ておきます。分かっていれば飛ばします。
exiftool -g1 -a -s sample.jpg
今回は日時で判別させたいため、次のような日付データを確認します。
FileModifyDate : 2019:11:15 12:24:14+09:00
FileAccessDate : 2024:02:25 15:27:20+09:00
FileInodeChangeDate : 2019:11:15 12:24:14+09:00
DateTimeOriginal : 2019:09:17 12:32:05
CreateDate : 2019:09:17 12:32:05
写真であれば、DateTimeOriginalが良いでしょう。
加工した画像であったり、キャプチャ画像などは、FileModifyDateが適当でしょうか。
使用した書式
実際に使用したのは次の通りです。環境に合わせて変更してください。
ターミナル実行場所はbackup_img階層
exiftool '-Directory < DateTimeOriginal' -d "%Y/%m" -r images/
Exifデータの「DateTimeOriginal」から年月日を取得し、年フォルダ/月フォルダの階層で対象画像を移動させます。
対象画像はimages内のもので、-rオプションを付けてあるため、images内にサブフォルダがあった場合もスキャン対象になります。
サブフォルダは触って欲しくないのであれば、-rオプションは外します。
ターミナルにエラーが出るのは、主に移動先に同名ファイルが存在している場合と、そもそもExifデータが無いよ、といった場合がほとんどです。
それはDateTimeOriginalデータがないだけで、ファイル自体には日付データがあって移動させたい画像もあるため、別の項目からも判断させてみました。
exiftool '-Directory < FileModifyDate' -d "%Y/%m" -r images/
主に加工したスクリーショット画像などがそれにあたります。
一度、DateTimeOriginalで移動させた後、エラーで残ったファイルを再度FileModifyDateに置き換えたコマンドを実行しました。
対応指定無いファイルも紛れていることもあり、それはあとから手動で目視して処理します。
画像が多いと時間はかかります。ちゃんとディレクトリも新規作成してくれるし、手動で移動&コピーより楽です。
24 directories scanned
19 directories created
860 image files updated
1 files weren't updated due to errors
Macで使いましたがWindowsでもLinuxでもexiftoolがあれば同じです。
正規表現も含め、かなり細かく色々なExifデータからファイル操作を行えるので、詳しくは公式サイトで確認してください。
バージョンが古いと対応していない拡張子もあります。最新にしておきましょう。今はwebp形式にも対応していて助かります。