特定のフォルダ内にあるファイルのExif情報(撮影日時)を変更するスクリプト書いたよ(^0^)

#!/usr/bin/perl -w

# =================================================================================
# Description: 特定のフォルダ内にあるファイルのExif情報(撮影日時)を変更するスクリプト
# Created: 2014/08/28 01:24
# Author: rin1024
#
# Usage:
# $ perl exifEditor.pl -date=2014/03/03 -folder=/path/to/image_folder/
# =================================================================================

use strict;
use Image::ExifTool;
use Data::Dumper;

my $newDate;
my $folderPath;
my $exifTool = new Image::ExifTool;

if (scalar @ARGV < 1) {
  print 'usage: ', $/ ,
        '$ perl exifEditor.pl -date=2014/03/03 -folder=/path/to/image_folder/', $/;
  exit;
}
else {
  for my $v(@ARGV) {
    my @kv = split("=", $v);
    if (scalar @kv < 1) {
      next;
    }

    if ($kv[0] eq '-date' && $kv[1] =~ /[0-9]{4}\/[0-9]{2}\/[0-9]{2}/) {
      $newDate = $kv[1];
      $newDate =~ s/([0-9]{4})\/([0-9]{2})\/([0-9]{2})/$1:$2:$3 00:00:00/g;
    }
    elsif ($kv[0] eq '-folder') {
      $folderPath = $kv[1];
      unless ($folderPath =~ /\/$/) {
        $folderPath .= '/';
      }
    }
  }

  if (!$newDate) {
    print 'Date is incorrect.', $/;
    exit;
  }
  if (!$folderPath) {
    print 'Folder is incorrect.', $/;
    exit;
  }
}

opendir my $dh, $folderPath or die "$!:$folderPath";

# ディレクトリ一覧を処理していく
while (my $fileName = readdir $dh) {
  next if $fileName =~ /^\./;
  my $filePath = $folderPath . $fileName;
  #print $filePath, $/;

  $exifTool->ExtractInfo($filePath) or die $!;

  # 現在のEXif情報を表示
  #print Dumper $exifTool->ImageInfo($filePath);

  # 現在の状態確認
  print "FileName\t", $fileName, $/;
  print "CreateDate\t", $exifTool->GetValue('CreateDate'), $/;
  print "DateTimeOriginal\t", $exifTool->GetValue('DateTimeOriginal'), $/;
  print $/;

  # 撮影日時を変更
  #my $newDate = "2014:03:03 01:01:01"; #strftime "%Y:%m:%d %H:%M:%S", localtime((stat($_))[9]);
  $exifTool->SetNewValue("DateTimeOriginal" => $newDate);

  # 書き込み
  $exifTool->WriteInfo($filePath) or die $!;
}

closedir $dh;

exit;

1;