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: