#! /usr/bin/perl -w use strict; use Image::Info; use Time::Local; use vars qw ($indir); my $indir = shift; die "specifiy input directory" unless (defined $indir); my %pics; unless (opendir(DIR,$indir)) { die "Could not open directory $indir: $!"; } while (my $file = readdir(DIR)) { next unless ($file =~ /\.jpg$/i); my ($date,$time) = split(/ /, exifInfo("$file")); my ($year,$month,$mday) = split(/\:/,$date); my ($hour,$min,$sec) = split(/\:/,$time); my $stamp = timelocal($sec,$min,$hour,$mday,$month-1,$year); $pics{$file} = $stamp; } my @sorted = sort { $pics{$a} <=> $pics{$b} } keys %pics; for (my $i = 0; $i <= $#sorted; $i++) { my $filename = $sorted[$i]; my $stamp = $pics{$filename}; my $newfilename = sprintf("%03d_$filename",$i+1); print "$filename --> $newfilename ($stamp)\n"; rename "$indir/$filename", "$indir/$newfilename"; } exit; sub exifInfo { my $infile = shift; my $exif = Image::Info::image_info("$indir/$infile"); my $stamp = $exif->{DateTimeOriginal}; $stamp = "" unless (defined $stamp); return $stamp; }