I'm releasing this under the GPL, v3 which can be found at http://www.gnu.org/licenses/gpl.html
#!/usr/bin/perl -w #movephoto.pl -- call this version 0.01 use strict; use File::List; use File::Copy; use File::Path; use Image::ExifTool; use File::Basename; my $basedir = "put path to source here"; my $target = "put path to target here"; my $i = 0; my $search = new File::List("$basedir"); my $fileArrRef = $search->find("JPG\$|jpg\$|cr2\$|CR2\$"); sub pathbuild { my $newpath = $_[0]; if (! -d $newpath) { if ( -e $newpath ) { File::Path::remove_tree($newpath); } File::Path::make_path($newpath); } return $!; } my $dtOrig;my $date;my $time;my $yr;my $mo;my $day; foreach my $fullname (@$fileArrRef) { my $info = Image::ExifTool::ImageInfo($fullname); if ($$info{DateTimeOriginal}) { $dtOrig = $$info{DateTimeOriginal}; ($date,$time) = split( / /, $dtOrig); ($yr,$mo,$day) = split(/:/, $date); } else { $dtOrig = ''; } my ($name,$path,$ext) = File::Basename::fileparse($fullname,qr/jpg|cr2/i); my $dest = "$target/undated"; if ($dtOrig) { $dest = "$target/$yr/$mo/$day" } pathbuild($dest); my $destfile = "$dest/$name$ext"; $i = 0; while (-e $destfile){ $destfile = "$dest/$name$i.$ext"; $i++; } if (link ($fullname,$destfile)){ unlink ($fullname); } else { copy ($fullname,$destfile); } }