[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Script pour renommer des photos selon la date de leur prise



Christophe Diaz wrote:
Guillaume a écrit :
Bonjour à tous.

Qui saurait me dire comment faire la (lourde) tâche suivante ?

J'ai tout un tas de photos issues de mon appareil photo numérique en .jpg qui sont classées n'importe comment et j'aimerais les renommer en fonction de la date à laquelle elles ont été prises, c'est-à-dire faire en sorte que ma photo nommée img_0258.jpg prise le 30 mars 1998 s'appelle désormais 08_03_30.jpg...


Perso j'utilise ce script
et moi celui-ci
___________________________________________________________________
#!/usr/bin/perl -w

use strict;
use Getopt::Long;
use Pod::Usage;

# dépend de exiftool qui est dans libimage-exiftool-perl

Getopt::Long::Configure("bundling","no_ignore_case_always");
my ($verbose, $no_act, $force, $op);
pod2usage(2)
unless GetOptions
   ('help|h'           => sub { pod2usage(1); },
    'man'              => sub { pod2usage(-verbose => 2); },
    'v|verbose'        => \$verbose,
    'n|no-act'         => \$no_act,
    'f|force'          => \$force,
) and $op = shift;

$verbose++ if $no_act;

if (!@ARGV) {
    print "reading filenames from STDIN\n" if $verbose;
    @ARGV = <STDIN>;
    chop(@ARGV);
}

my $t = `mktemp -t renommePhoto.XXXXXX`; chomp($t);

for (@ARGV) {
    my $was = $_;
    eval $op;
    die $@ if $@;
    my $new = $_;

    system("exiftool $was|grep Date > $t");

    my ($date,$dateOrig,$dateDig); my $l;

    open (LEC,"$t") or die "Echec open $t $!\n";
    while (<LEC>) {
        $l = $_;
        if ( $l = /Create Date * : (.*)$/ ) {
            $date = $1;
        } elsif ( $l = /Date\/Time Original * : (.*)$/ ) {
            $dateOrig = $1;
        } elsif ( $l = /Modify Date * : (.*)$/ ) {
            $dateDig = $1;
        }
    }
    close LEC;

    if ( ($date ne $dateOrig) or ($date ne $dateDig) ) {
die "fichier $was dates différentes\nCreate Date : $date\nDate/Time Original: $dateOrig\nModify Date : $dateDig\n" ;
    }

    my $indice;
if ($date =~ /..([0-9]+):([0-9]+):([0-9]+) ([0-9]+):([0-9]+):([0-9]+)$/) {
        $indice = "$1$2$3$4$5$6";
    } else {
        die "fichier $was date $date indice ?\n";
    }

    $new = $indice.$new;

    if ( $was eq $new ) {
        die "was $was new $new\n";
    }
    if ( -e $new and !$force ) {
        warn  "$was not renamed: $new already exists\n";
    } elsif ($no_act or rename $was, $new) {
        print "$was renamed as $new\n" if $verbose;
    } else {
        warn  "Can't rename $was $new: $!\n";
    }
}

unlink($t);

exit 0;


=head1 NAME

renommePhoto.pl - renommer des photos en mettant la date en début du nom

=head1 SYNOPSIS

renommePhoto.pl <idem rename>

=head1 DESCRIPTION

Objet : renommer des photos en mettant en tête du nom la date de prise de la
photo en évitant les doubles avec un indice sur une lettre

Le motif est appliqué sur le nom de fichier lu pour le renommer avant de lui
ajouter en tête la date.

=head1 AUTHOR

F.Mescam <Francois@mescam.org>

This code was copyrighted in 2005, and is released under the same terms as Perl
itself.

=cut
----------------------------------------------------------------------------------


Reply to: