シェルコマンドだけの解決を考えたができそうにないのでPHPのスクリプトで解決した。以下がそのコードです。
exifに関連する関数を使い情報を取得しています。
<?php // コマンドライン引数で対象ディレクトリを指定 $d = dir($_SERVER['argv'][1]); // ディレクトリを繰り返し読み込む while(false !== ($e = $d->read())){ if(preg_match('/.?\.(jpg)|(JPG)$/',$e)){ $exif = exif_read_data($_SERVER['argv'][1] . '/' . $e , 0, true); if(preg_match('/[pP][iI][cC].?/', $e)){ $a = preg_grep("/^TimeDate=/",preg_split("/[\s,]+/", $exif["APP12"]['Info'])); $tt = substr($a[4], 9); if(strlen($tt) != 2){ $t = $tt - date('Z'); touch($_SERVER['argv'][1] . '/' . $e, $t); echo $_SERVER['argv'][1] . '/' . $e ."->" . date('Y/m/d H:i:s', $t) . "\n"; } } if(substr($e,0,3) == 'DSC'){ $dt = split('[:\ ]',$exif['EXIF']['DateTimeOriginal']); $t = mktime($dt[3], $dt[4], $dt[5], $dt[1], $dt[2], $dt[0]); touch($_SERVER['argv'][1] . '/' . $e, $t); echo $_SERVER['argv'][1] . '/' . $e . '->' . $exif['EXIF']['DateTimeOriginal'] ."\n"; } } } $d->close(); ?>