exif-date2.pl
1 #!/usr/bin/env perl
2 use strict;
3 $|++;
4
5 use Image::ExifTool qw(ImageInfo);
6
7 use Time::Local;
8
9 for my $file (@ARGV) {
10 my $ii = ImageInfo( $file, qw(DateTimeOriginal DateTime) )
11 or warn("Skipping $file\n"), next;
12 my ($created) =
13 grep /\S/, @$ii{qw(DateTimeOriginal DateTime)};
14 next unless $created;
15 warn "using $created for $file\n";
16 if ( $created =~ s/([-+ ])(\d\d):(\d\d)$// ) {
17 my ( $sign, $hour, $minute ) = ( $1, $2, $3 );
18
19 # warn "ignoring offset of $sign $hour:$minute\n";
20 }
21 my @digits = $created =~ /(\d+)/g or next;
22 if ( $digits[0] < 1900 ) {
23 warn "bad year $digits[0] for $file";
24 next;
25 }
26 $digits[0] -= 1900;
27 $digits[1] -= 1;
28 my $gmtime = timegm( reverse @digits );
29 if ( $gmtime > time or $gmtime < time - 86400 * 90 ) {
30 warn "preposterous gmtime for $file: ", scalar gmtime $gmtime;
31
32 # next;
33 }
34 utime( $gmtime, $gmtime, $file ) or warn "Cannot utime on $file: $!";
35 }