exif_rename.pl
changeset 0 624a9ab34425
--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
+++ b/exif_rename.pl	Wed May 07 16:25:00 2014 +0200
@@ -0,0 +1,109 @@
+#!/usr/bin/perl -w
+#
+# set date from exif info
+# $Id: exif_rename.pl 208 2003-09-15 12:24:09Z grin $
+#
+# (c)2003, Peter Gervai
+#
+
+
+use POSIX qw( strftime );
+
+my $exifprog="exiftags";
+my $filepattern = qr/^(.+)\.jpg/i;
+my $FNAME = "pic";
+my $FEXTENSION = "jpg";
+
+my $into_current_dir = 1;
+
+my $DEBUG=0;
+
+my $dir = $ARGV[0];
+if( !defined($dir) || !-d $dir ) {
+    print "hasznalat: $0 <start directory>\n\n";
+    exit;
+}
+
+
+my %files;
+&walk_files( $dir, '', \%files );
+
+for my $key (sort keys %files) {
+    
+    print "($key) ", $files{$key}[0], '->', $files{$key}[1], "<<\n" if $DEBUG;
+    print "mv \"$files{$key}[0]\" \"$files{$key}[1]\"\n";
+    
+}
+
+
+sub walk_files {
+    my ($base, $sdir, $rfiles) = @_;
+    print "Walking dir $base; $sdir...\n";
+    
+    if( !-r "$base/$sdir" ) {
+        print "Nem olvashato $base/$sdir!\n";
+        return undef;
+    }
+    
+    opendir( D, "$base/$sdir" );
+    my @entries = grep { !/^\.\.?$/ } readdir( D );
+    closedir( D );
+    foreach my $entry (@entries) {
+        if( -f "$base/$sdir/$entry" && $entry =~ /$filepattern/ ) {
+            # process file
+            my $newname = &get_newname( "$base/$sdir", $entry, $1 );
+            
+            my $cnt = 1;
+            my $oname = $newname;
+            $newname .= ".$FEXTENSION";
+            while( defined( $rfiles->{$newname} ) ) {
+                print "CLASH $cnt\n" if $DEBUG;
+                $newname = "$oname-$cnt.$FEXTENSION";
+                $cnt++;
+            }
+            
+            $rfiles->{$newname} = ["$base/$sdir/$entry", $newname];
+            
+            print "Got file $base; $sdir; $entry.\n" if $DEBUG;
+            
+        } elsif( -d "$base/$sdir/$entry" ) {
+            # walk subdir
+            &walk_files( $base, "$sdir/$entry", $rfiles );
+        }
+    }
+}
+
+
+
+sub get_newname {
+    my ($base, $entry, $basename) = @_;
+    my $time = &get_exif_time( "$base/$entry" );
+    
+    my $newname;
+    if( $into_current_dir ) {
+        $newname = "./$FNAME-$time";
+    } else {
+        $newname = "$base/$FNAME-$time";
+    }
+    
+    return $newname;
+}
+
+
+sub get_exif_time {
+    my $file = shift;
+    
+    if( -f $file ) {
+        my $res = qx( $exifprog "$file" 2> /dev/null );
+        if( $res =~ m/Image Created: (\S+ \S+)/ ) {
+            #print "res=$_>>$1<<\n";
+            # s m h md m y
+            my @d = split /[: ]/, $1;
+            #print "mon:", join(",", @d) , "<<\n";
+            $d[1] -= 1;
+            $d[0] -= 1900;
+            return strftime("%Y.%m.%d-%H.%M.%S",  @d[5,4,3,2,1,0] );
+        }
+    }
+    return "none";
+}