-PERL- Renommer photo en fonction fichier
Résolu/Fermé
phoenix1984
Messages postés
30
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
9 décembre 2011
-
18 juin 2008 à 15:33
Belin - 16 juil. 2008 à 17:09
Belin - 16 juil. 2008 à 17:09
A voir également:
- -PERL- Renommer photo en fonction fichier
- Fichier rar - Guide
- Renommer plusieurs fichiers en même temps - Guide
- Fonction si et - Guide
- Fichier host - Guide
- Comment ouvrir un fichier epub ? - Guide
12 réponses
phoenix1984
Messages postés
30
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
9 décembre 2011
19 juin 2008 à 11:02
19 juin 2008 à 11:02
Une petite idée ?? :s
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
19 juin 2008 à 13:31
19 juin 2008 à 13:31
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__
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
19 juin 2008 à 20:05
19 juin 2008 à 20:05
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
phoenix1984
Messages postés
30
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
9 décembre 2011
20 juin 2008 à 11:56
20 juin 2008 à 11:56
:) 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 !
phoenix1984
Messages postés
30
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
9 décembre 2011
>
phoenix1984
Messages postés
30
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
9 décembre 2011
20 juin 2008 à 12:00
20 juin 2008 à 12:00
juste petite precision quand je dit qu'il y a un espace qui est bloquant, en fait c'est bloquant pour accéder à la photo ..
les variables ${rep}${1} forment => /home/vincent/TROMBI/Pierre MARTIN.JPG
là, "normal" le programme n'y accède pas, il bloque à /home/vincent/TROMBI/Pierre
merci
les variables ${rep}${1} forment => /home/vincent/TROMBI/Pierre MARTIN.JPG
là, "normal" le programme n'y accède pas, il bloque à /home/vincent/TROMBI/Pierre
merci
phoenix1984
Messages postés
30
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
9 décembre 2011
>
phoenix1984
Messages postés
30
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
9 décembre 2011
20 juin 2008 à 12:38
20 juin 2008 à 12:38
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 " _ "
:)
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
20 juin 2008 à 23:23
20 juin 2008 à 23:23
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
phoenix1984
Messages postés
30
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
9 décembre 2011
1 juil. 2008 à 10:54
1 juil. 2008 à 10:54
Désolé de te répondre si tard lamij20j mais le scirpt fonctionne très bien, je ne sais pas ce qui se passait.
Donc comme d'hab: merci beaucoup pour ton aide, rapide et efficace !! :D
Vincent
Donc comme d'hab: merci beaucoup pour ton aide, rapide et efficace !! :D
Vincent
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)
phoenix1984
Messages postés
30
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
9 décembre 2011
1 juil. 2008 à 11:02
1 juil. 2008 à 11:02
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.
phoenix1984
Messages postés
30
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
9 décembre 2011
1 juil. 2008 à 11:44
1 juil. 2008 à 11:44
Dans ton dossier "test admin" tu as pas de fichier 9.JPG .. alors je ne sais pas si j'ai loupé quelque chose, mais en tout cas il ne pourras pas te le renommer en 94.JPG ...
sinon as tu un message d'erreur particulier ?
sinon as tu un message d'erreur particulier ?
Belin
>
phoenix1984
Messages postés
30
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
9 décembre 2011
1 juil. 2008 à 11:52
1 juil. 2008 à 11:52
Et le fait de pas avoir de 9 dans le dossier, c'était fait exprès : en effet certaines entrées dans la listes ne sont pas là en tant qu'images.
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...
phoenix1984
Messages postés
30
Date d'inscription
jeudi 22 novembre 2007
Statut
Membre
Dernière intervention
9 décembre 2011
1 juil. 2008 à 12:02
1 juil. 2008 à 12:02
cool si ça marche pour toi aussi :)
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 ?
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
>
Belin
15 juil. 2008 à 15:19
15 juil. 2008 à 15:19
Salut,
essaie avec C en majuscules
106485010510997108
essaie avec C en majuscules
my $rep='C:\test';--
106485010510997108
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
lami20j
Messages postés
21331
Date d'inscription
jeudi 4 novembre 2004
Statut
Modérateur, Contributeur sécurité
Dernière intervention
30 octobre 2019
3 569
16 juil. 2008 à 17:02
16 juil. 2008 à 17:02
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__