#!/usr/bin/perl use strict; use warnings; use utf8; use open qw/:std :utf8/; use Encode; use Getopt::Long; my ($programme) = $0 =~ m|^(?:.*/)?(.+)|; $programme = decode_utf8($programme); my $source = ""; #par exemple "Vieil_v2.source" my $dir = ""; #par exemple "Vv2_new" eval { $SIG{__WARN__} = sub {usage(1);}; GetOptions( "source=s" => \$source, "dir=s" => \$dir, ); }; $SIG{__WARN__} = sub {warn $_[0];}; usage(2) if not $dir or not $source; open(SOURCE, "<:encoding(UTF-8)", $source) or die "Couldn't open file $source, $!"; chomp(my @sourcefile = <SOURCE>); my $size = @sourcefile; print STDERR $size; close SOURCE; my %correspondance; for(my $n=0 ; $n<= $#sourcefile ; $n++ ) { $sourcefile[$n] =~ /(\w{40})\W*?(\w+)/; $correspondance{$1} = $2; } #print "$_ $correspondance{$_}\n" for (keys %correspondance);#imprimer une table d'hachage my $size_cles = keys %correspondance; print STDERR $size_cles; opendir(DIR, $dir) or die "Couldn't open the directory $dir, $!"; my @files = grep {$_ ne '.' and $_ ne '..'} readdir(DIR); closedir(DIR); foreach my $file (@files){ my $new = $file; $new =~ s/(\w{40}).txt/$1/; if ($correspondance{"$new"}) { $new = $correspondance{"$new"}; rename("$dir/$file","$dir/$new.txt"); print "$file => $new.txt\n"; } else { print "Pas de correspondance pour le fichier $file\n"; } } exit 0; sub usage { my $code = shift; print STDERR "Usage : $programme -s source -d dir\n"; exit $code; }