-PERL- Renommer photo en fonction fichier
Résolu
phoenix1984
Messages postés
30
Date d'inscription
Statut
Membre
Dernière intervention
-
Belin -
Belin -
Bonjour,
je souhaiterais mettre en place un bout de script perl.
Voilà la situation :
- j'ai un dossier trombinoscope avec les portraits des employés. Les noms des photos correspondent aux noms des personnes.
- j'ai un fichier excel, avec 2 colonnes : une le matricule des personnes, l'autre leur noms.
=> Objectif :
Renommer toutes les photos en remplaçant le nom des personnes par leur matricule ...
Une idée ?
Je sais comment mettre dans un tableau les valeurs noms, matricule ... mais comme dire :
" si nom_photo = nom_user, renommer en mettant la matricule en face de nom_user " ...
Merci de votre aide !! :)
je souhaiterais mettre en place un bout de script perl.
Voilà la situation :
- j'ai un dossier trombinoscope avec les portraits des employés. Les noms des photos correspondent aux noms des personnes.
- j'ai un fichier excel, avec 2 colonnes : une le matricule des personnes, l'autre leur noms.
=> Objectif :
Renommer toutes les photos en remplaçant le nom des personnes par leur matricule ...
Une idée ?
Je sais comment mettre dans un tableau les valeurs noms, matricule ... mais comme dire :
" si nom_photo = nom_user, renommer en mettant la matricule en face de nom_user " ...
Merci de votre aide !! :)
A voir également:
- -PERL- Renommer photo en fonction fichier
- Fichier bin - Guide
- Renommer fichier en masse - Guide
- Fichier epub - Guide
- Fonction si et - Guide
- Fichier rar - Guide
12 réponses
Salut,
pour ne pas se compliquer avec la lecture du fichier .xls je te propose d'enregistrer le fichier excel en format csv (séparateur ; )
Par exemple supposons que le fichier .csv est :
Et que le répertoire trombinoscope contient ces fichiers
Tu peux essayer comme ça (ATTENTION : je n'ai pas testé)
pour ne pas se compliquer avec la lecture du fichier .xls je te propose d'enregistrer le fichier excel en format csv (séparateur ; )
Par exemple supposons que le fichier .csv est :
titi;111 toto;222 tata;333
Et que le répertoire trombinoscope contient ces fichiers
titi.jpg toto.jpg tata.jpg
Tu peux essayer comme ça (ATTENTION : je n'ai pas testé)
#!/usr/bin/perl use strict;use warnings; open FILE,"fic.csv" or die "E/S : $!\n"; my $rep='/chemin/vers/trombinoscope/'; # à modifier avec #ton répertoire de test d'abord while(<FILE>)( /(.*);(.*)/; rename("${rep}${1}.jpg","${2}.jpg"); } __END__
Salut,
maintenant c'est testé ;-)
j'ai écrit dans chaque fichier le nom sans extension pour que tu voies que 333.jpg correspond bien à tata.jpg suite au fichier .csv tata;333
maintenant c'est testé ;-)
j'ai écrit dans chaque fichier le nom sans extension pour que tu voies que 333.jpg correspond bien à tata.jpg suite au fichier .csv tata;333
lami20j@debian:~/trash/trombinoscope$ pwd /home/lami20j/trash/trombinoscope lami20j@debian:~/trash/trombinoscope$ ls -1 excel.csv renommer.pl tata.jpg titi.jpg toto.jpg lami20j@debian:~/trash/trombinoscope$ cat tata.jpg tata lami20j@debian:~/trash/trombinoscope$ cat titi.jpg titi lami20j@debian:~/trash/trombinoscope$ cat toto.jpg toto lami20j@debian:~/trash/trombinoscope$ cat renommer.pl #!/usr/bin/perl use strict;use warnings; open FILE,"excel.csv" or die "E/S : $!\n"; my $rep='/home/lami20j/trash/trombinoscope/'; # à modifier avec #ton répertoire de test d'abord while(<FILE>){ /(.*);(.*)/; print "${rep}${1}.jpg -> ${rep}${2}.jpg\n"; rename("${rep}${1}.jpg","${rep}${2}.jpg"); } __END__ lami20j@debian:~/trash/trombinoscope$ cat excel.csv titi;111 toto;222 tata;333 lami20j@debian:~/trash/trombinoscope$ perl renommer.pl /home/lami20j/trash/trombinoscope/titi.jpg -> /home/lami20j/trash/trombinoscope/111.jpg /home/lami20j/trash/trombinoscope/toto.jpg -> /home/lami20j/trash/trombinoscope/222.jpg /home/lami20j/trash/trombinoscope/tata.jpg -> /home/lami20j/trash/trombinoscope/333.jpg lami20j@debian:~/trash/trombinoscope$ cat 111.jpg titi lami20j@debian:~/trash/trombinoscope$ cat 222.jpg toto lami20j@debian:~/trash/trombinoscope$ cat 333.jpg tata lami20j@debian:~/trash/trombinoscope$ ls -1 111.jpg 222.jpg 333.jpg excel.csv renommer.pl
:) effectivement très bien le script, j'avais essayé de faire quelque chose de similaire mais bon .. j'avais beaucoup plus de ligne et ca ne marchait pas entièrement ... donc un grand merci !
juste une dernière chose : mes noms de fichiers photos ont un espace au milieu .. ex : Pierre MARTIN.JPG ...
Du coup le script ne les renomme pas ... je pense qu'il doit juste y avoir un paramètre à passer, mais je ne sais pas lequel et où :$
merci d'avance pour ton aide !
juste une dernière chose : mes noms de fichiers photos ont un espace au milieu .. ex : Pierre MARTIN.JPG ...
Du coup le script ne les renomme pas ... je pense qu'il doit juste y avoir un paramètre à passer, mais je ne sais pas lequel et où :$
merci d'avance pour ton aide !
bon .. c'est peut être pas la meilleure méthode mais si ca interesse quelqun, positionnez vous dans le répertoire contenant les fichiers avec espaces et tappez
rename 's/:blank:/_/g' *
ça remplace tous les espaces par des " _ "
:)
rename 's/:blank:/_/g' *
ça remplace tous les espaces par des " _ "
:)
Salut,
c'est bizarre, voici chez moi
C'est peut être à cause de ton fichier .csv
c'est bizarre, voici chez moi
lami20j@debian:~/trash/trombinoscope$ pwd /home/lami20j/trash/trombinoscope lami20j@debian:~/trash/trombinoscope$ ls -1 excel.csv Pierre MARTIN.jpg renommer.pl tata.jpg titi.jpg toto.jpg lami20j@debian:~/trash/trombinoscope$ cat renommer.pl #!/usr/bin/perl use strict;use warnings; open FILE,"excel.csv" or die "E/S : $!\n"; my $rep='/home/lami20j/trash/trombinoscope/'; # à modifier avec #ton répertoire de test d'abord while(<FILE>){ /(.*);(.*)/; print "${rep}${1}.jpg -> ${rep}${2}.jpg\n"; rename("${rep}${1}.jpg","${rep}${2}.jpg"); } __END__ lami20j@debian:~/trash/trombinoscope$ cat excel.csv titi;111 toto;222 tata;333 Pierre MARTIN;999999 lami20j@debian:~/trash/trombinoscope$ perl renommer.pl /home/lami20j/trash/trombinoscope/titi.jpg -> /home/lami20j/trash/trombinoscope/111.jpg /home/lami20j/trash/trombinoscope/toto.jpg -> /home/lami20j/trash/trombinoscope/222.jpg /home/lami20j/trash/trombinoscope/tata.jpg -> /home/lami20j/trash/trombinoscope/333.jpg /home/lami20j/trash/trombinoscope/Pierre MARTIN.jpg -> /home/lami20j/trash/trombinoscope/999999.jpg lami20j@debian:~/trash/trombinoscope$ ls -1 111.jpg 222.jpg 333.jpg 999999.jpg excel.csv renommer.plEn fait l'expression régulière /(.*);(.*)/;récupère le nom complet (avec ou sans esapce)
C'est peut être à cause de ton fichier .csv
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Ce code est exactement ce que je cherchais, je souhaiterai juste savoir s'il est possible d'avoir des entrées dans la listes qui ne sont pas présentes sous forme d'images, et donc ne convertir que les images présentes.
D'avance merci, vous êtes mes biefaiteurs du jour !
Ce code est exactement ce que je cherchais, je souhaiterai juste savoir s'il est possible d'avoir des entrées dans la listes qui ne sont pas présentes sous forme d'images, et donc ne convertir que les images présentes.
D'avance merci, vous êtes mes biefaiteurs du jour !
Hi !
Alors quand je teste sous mac, j'ai cette erreur :
D'autre part, je souhaiterai savoir si c'est génant si j'ai des numéros dans les deux colonnes (et donc il peut trouver le nom du fichier dans la seconde colonne)
Alors quand je teste sous mac, j'ai cette erreur :
BELDEMXXXX:~/Desktop/wolf/test admin$ perl .DS_Store 2.JPG 6.JPG Classeur1.csv 1.JPG 4.JPG 7.JPG script.pl 10.JPG 5.JPG 8.JPG BELDEMXXXX:~/Desktop/wolf/test admin$ perl script.pl syntax error at script.pl line 9, near ")( " Unmatched right curly bracket at script.pl line 11, at end of line syntax error at script.pl line 11, near "}" Execution of script.pl aborted due to compilation errors. BELDEMXXXX:~/Desktop/wolf/test admin$
D'autre part, je souhaiterai savoir si c'est génant si j'ai des numéros dans les deux colonnes (et donc il peut trouver le nom du fichier dans la seconde colonne)
salut Belin !
as tu bien fait un copier coller du code de Lami20j ??
#!/usr/bin/perl
use strict;use warnings;
open FILE,"excel.csv" or die "E/S : $!\n";
my $rep='/home/lami20j/trash/trombinoscope/'; # à modifier avec
#ton répertoire de test d'abord
while(<FILE>){
/(.*);(.*)/;
print "${rep}${1}.jpg -> ${rep}${2}.jpg\n";
rename("${rep}${1}.jpg","${rep}${2}.jpg");
}
__END__
dans ton message d'erreur on dirait qu'il te manque " } " à la fin de ton scirpt.
Sinon pour ta question je ne pense que cela soit gênant .. en gros tu veux remplacer le fichier 12.jpg par 13.jpg ?
Dans tous les cas le script prend un fichier, le cherche dans le .csv et le renomme en fonction de ce qu'il y a dans la 2eme colonne ... à partir de là tu y met ce que tu veux :)
as tu bien fait un copier coller du code de Lami20j ??
#!/usr/bin/perl
use strict;use warnings;
open FILE,"excel.csv" or die "E/S : $!\n";
my $rep='/home/lami20j/trash/trombinoscope/'; # à modifier avec
#ton répertoire de test d'abord
while(<FILE>){
/(.*);(.*)/;
print "${rep}${1}.jpg -> ${rep}${2}.jpg\n";
rename("${rep}${1}.jpg","${rep}${2}.jpg");
}
__END__
dans ton message d'erreur on dirait qu'il te manque " } " à la fin de ton scirpt.
Sinon pour ta question je ne pense que cela soit gênant .. en gros tu veux remplacer le fichier 12.jpg par 13.jpg ?
Dans tous les cas le script prend un fichier, le cherche dans le .csv et le renomme en fonction de ce qu'il y a dans la 2eme colonne ... à partir de là tu y met ce que tu veux :)
Merci pour ta réponse. Il devait bien y avoir une erreur, néanmoins ça foire encore.
la j'ai :
avec comme fichier csv :
Quant à ma question : je dois renommer des fichiers à 6 chiffres en fichiers à 12 chiffres, et je veux pas qu'il me trouve le nom dans la partie à 12 chiffres.
la j'ai :
BELDEMXXXX:~/Desktop/wolf/test admin$ ls 1.JPG 2.JPG 5.JPG 7.JPG Classeur1.csv 10.JPG 4.JPG 6.JPG 8.JPG script.pl BELDEMXXXX:~/Desktop/wolf/test admin$ cat Classeur1.csv 9;94BELDEMXXXX:~/Desktop/wolf/test admin$ man cat BELDEMXXXX:~/Desktop/wolf/test admin$ ls 1.JPG 2.JPG 5.JPG 7.JPG Classeur1.csv 10.JPG 4.JPG 6.JPG 8.JPG script.pl BELDEMXXXX:~/Desktop/wolf/test admin$ perl script.pl 9.JPG -> /Users/admin/Desktop/wolf/test/94.JPG BELDEMXXXX:~/Desktop/wolf/test admin$ ls 1.JPG 2.JPG 5.JPG 7.JPG Classeur1.csv 10.JPG 4.JPG 6.JPG 8.JPG script.pl
avec comme fichier csv :
1 14 2 24 3 34 4 44 5 54 6 64 7 74 8 84 9 94
Quant à ma question : je dois renommer des fichiers à 6 chiffres en fichiers à 12 chiffres, et je veux pas qu'il me trouve le nom dans la partie à 12 chiffres.
Voilà, ça a l'air de marcher. Le problème venait du csv : quand je le cat, ça me fesait 9;94, alors que pourtant quand excel l'ouvre ça m'affiche tout.
Merci les gens je vous aime d'amour, parce que me mettre au shell juste pour ça...
Merci les gens je vous aime d'amour, parce que me mettre au shell juste pour ça...
ouep le problème venait de excel 2k8 pour mac, un csv de excel de windows ou un fait main avec Textwrangler (je n'arrive pas a comprendre pourquoi apple a pas su foutre un éditeur de texte tout con décent et a mis une bouse rtf-only comme textEdit) ça marche.
Yop, encore moi, j'ai essayé de faire marcher le script sous windows avec activeperl et en changeant le fichier :
#!c:\Perl\bin
use strict;use warnings;
open FILE,"Classeur1.csv" or die "E/S : $!\n";
my $rep='c:\test'; # à modifier avec
#ton répertoire de test d'abord
while(<FILE>){
/(.*);(.*)/;
print "${rep}${1}.jpg -> ${rep}${2}.jpg\n";
rename("${rep}${1}.jpg","${rep}${2}.jpg");
}
__END__
print 'hello'
et dans l'invite de commande je chope "E:S : no such file or directory". Quelqu'un saurait-il quoi changer ?
#!c:\Perl\bin
use strict;use warnings;
open FILE,"Classeur1.csv" or die "E/S : $!\n";
my $rep='c:\test'; # à modifier avec
#ton répertoire de test d'abord
while(<FILE>){
/(.*);(.*)/;
print "${rep}${1}.jpg -> ${rep}${2}.jpg\n";
rename("${rep}${1}.jpg","${rep}${2}.jpg");
}
__END__
print 'hello'
et dans l'invite de commande je chope "E:S : no such file or directory". Quelqu'un saurait-il quoi changer ?
Ca n'a rien changé.
Mais, en revenant de manger, ça marche. Je ne cherche même plus, trop peur que ça marche plus :)
En tout cas merci :)
Mais, en revenant de manger, ça marche. Je ne cherche même plus, trop peur que ça marche plus :)
En tout cas merci :)
Après test plus approfondi, la version pour windows doit être modifiée comme suit :
#!/usr/bin/perl
use strict;use warnings;
open FILE,"Classeur1.csv" or die "E/S : $!\n";
my $rep='C:\test'; # à modifier avec
#ton répertoire de test d'abord
while(<FILE>){
/(.*);(.*)/;
print "${rep}\\${1}.JPG -> ${rep}\\${2}.JPG\n";
rename("${rep}\\${1}.JPG","${rep}\\${2}.JPG");
}
__END__
En effet, on ne peut mettre folder a C:\test\, et si on ne met pas les deux \ avant les nom de fichiers, il cherchera le fichier c:\testmontrucdemacolonne.jpg
#!/usr/bin/perl
use strict;use warnings;
open FILE,"Classeur1.csv" or die "E/S : $!\n";
my $rep='C:\test'; # à modifier avec
#ton répertoire de test d'abord
while(<FILE>){
/(.*);(.*)/;
print "${rep}\\${1}.JPG -> ${rep}\\${2}.JPG\n";
rename("${rep}\\${1}.JPG","${rep}\\${2}.JPG");
}
__END__
En effet, on ne peut mettre folder a C:\test\, et si on ne met pas les deux \ avant les nom de fichiers, il cherchera le fichier c:\testmontrucdemacolonne.jpg
Salut,
as-tu essayé comme ça
as-tu essayé comme ça
#!/usr/bin/perl # ça c'est pour linux
use strict;use warnings;
open FILE,"Classeur1.csv" or die "E/S : $!\n";
my $rep='C:\test\'; # à modifier avec
#ton répertoire de test d'abord
while(<FILE>){
/(.*);(.*)/;
print "${rep}${1}.JPG -> ${rep}${2}.JPG\n";
rename("${rep}${1}.JPG","${rep}${2}.JPG");
}
__END__