NeverBlog::Likk::Unexistable;

見なかったことにして下さい

スマホで撮影した写真のファイル名が被る場合の整理方法

とある事情で写真の整理をしています。
大ざっぱだけどこんなディレクトリ状態。規則性あるようにも見えるけど実際の所規則性なんてのはない。

hoge/
hoge/2013/aaa.jpg
hoge/2013/bbb.jpg
hoge/2013/ccc.jpg
hoge/2014/05/aaa.jpg
hoge/2014/05/bbb.jpg
hoge/201405-2014-07/aaa.JPG
hoge/201405/マルチバイト文字列/aaa.JPG

大量にかつ複雑なディレクトリの中にあるファイルを一個ずつ見て回ると、どのディレクトリまでみたのか分からなくなって混乱してきた。
一覧でみたいんじゃあああと、直下に集約しようとすると今度はファイル名が被ってるので上書きしてしますか?とか聞いてきたので、ついカッとなって撮影日付で置換して直下に置くスクリプト書いた。

過去に書いた二つの記事の合わせ技


スクリプトは上記でいうhoge直下に置いて実行する。

use Image::ExifTool;
use Path::Class::Dir;
Path::Class::Dir->new("./")->recurse(
  callback => sub {
    my $f = shift->stringify;
    return if -d $f;
    return unless $f =~ m{\.jpg$}i;
    my $it = 'Image::ExifTool'->new;
    $it->ImageInfo($f);
    my $dt = $it->GetValue('DateTimeOriginal');
    $dt =~ s/[: ]//g;
    $dt = $dt . '.jpg';
    print $f . ' -> ' . $dt ."\n";
    rename($f, $dt);
  }
)