|
1 #!/usr/bin/perl -w |
|
2 # |
|
3 # set date from exif info |
|
4 # $Id: exif_settime.pl,v 1ab5ee663fb1 2011/05/24 06:19:06 grin $ |
|
5 # |
|
6 # (c)2003, Peter Gervai |
|
7 # |
|
8 |
|
9 |
|
10 use POSIX qw( strftime ); |
|
11 |
|
12 my $exifprog="exiftags"; |
|
13 my $filepattern = qr/^(.+)\.jpg/i; |
|
14 my $FNAME = "pic"; |
|
15 my $FEXTENSION = "jpg"; |
|
16 |
|
17 my $into_current_dir = 1; |
|
18 |
|
19 my $DEBUG=0; |
|
20 |
|
21 my $dir = $ARGV[0]; |
|
22 if( !defined($dir) || !-d $dir ) { |
|
23 print "hasznalat: $0 <start directory>\n\n"; |
|
24 exit; |
|
25 } |
|
26 |
|
27 |
|
28 my %files; |
|
29 &walk_files( $dir, '', \%files ); |
|
30 |
|
31 for my $key (sort keys %files) { |
|
32 |
|
33 print "($key) ", $files{$key}[0], '->', $files{$key}[1], "<<\n" if $DEBUG; |
|
34 print "mv \"$files{$key}[0]\" \"$files{$key}[1]\"\n"; |
|
35 |
|
36 } |
|
37 |
|
38 |
|
39 sub walk_files { |
|
40 my ($base, $sdir, $rfiles) = @_; |
|
41 print "#!/bin/sh\n#Walking dir $base; $sdir...\n"; |
|
42 |
|
43 if( !-r "$base/$sdir" ) { |
|
44 print "#Nem olvashato $base/$sdir!\n"; |
|
45 return undef; |
|
46 } |
|
47 |
|
48 opendir( D, "$base/$sdir" ); |
|
49 my @entries = grep { !/^\.\.?$/ } readdir( D ); |
|
50 closedir( D ); |
|
51 foreach my $entry (@entries) { |
|
52 if( -f "$base/$sdir/$entry" && $entry =~ /$filepattern/ ) { |
|
53 # process file |
|
54 my $time = &get_newtime( "$base/$sdir", $entry, $1 ); |
|
55 |
|
56 print "touch -d '$time' $base/$sdir/$entry\n"; |
|
57 } |
|
58 } |
|
59 } |
|
60 |
|
61 |
|
62 |
|
63 sub get_newtime { |
|
64 my ($base, $entry, $basename) = @_; |
|
65 my $time = &get_exif_time( "$base/$entry" ); |
|
66 |
|
67 return $time; |
|
68 } |
|
69 |
|
70 |
|
71 sub get_exif_time { |
|
72 my $file = shift; |
|
73 |
|
74 if( -f $file ) { |
|
75 my $res = qx( $exifprog "$file" 2> /dev/null ); |
|
76 if( $res =~ m/Image Created: (\S+ \S+)/ ) { |
|
77 #print "res=$_>>$1<<\n"; |
|
78 # s m h md m y |
|
79 my @d = split /[: ]/, $1; |
|
80 #print "mon:", join(",", @d) , "<<\n"; |
|
81 $d[1] -= 1; |
|
82 $d[0] -= 1900; |
|
83 return strftime("%Y-%m-%d %H:%M:%S", @d[5,4,3,2,1,0] ); |
|
84 } |
|
85 } |
|
86 return "today"; |
|
87 } |