#1 Le 25/02/2011, à 23:16
- Regenesis
Commande shell pour renommer des photos
Bonjour,
Voilà, j'ai récupéré un très grand nombre de photos de dermatologie, classées dans des dossiers par année, avec un titre du type :
aa x patho (y).jpg
aa = 2 derniers chiffres de l'année
x = numéro de la photo
patho = nom de la pathologie
(y) = facultatif, présent lorsqu'il s'agit d'une série de photos pour un même sujet, "y" permet de numéroter les photos
J'aimerai les rendre disponible sur une galerie web, mais pour cela il me faut les renommer de la façon suivante :
patho z (y).jpg
z = numéro de la série, lorsqu'il y a plusieurs séries
Je pense qu'une commande shell toute bête pourrait régler vite fait le problème (à la main c'est inenvisageable) , mais je n'ai pas vraiment les compétences...
Si une bonne âme pouvait m'aider, je lui en serais gré
Merci beaucoup!
Hors ligne
#2 Le 25/02/2011, à 23:52
- FRUiT
Re : Commande shell pour renommer des photos
Donne un exemple concret s'il te plait, de nom original (copié-collé, en changeant quelques lettres si besoin), ainsi qu'un exemple concret de résultat que tu souhaites obtenir à partir de cet original.
Neon Suite by FRUiT (kde4.6) [url]http://[Merci de relire les règles]/yzm7cee[/url]
"Pour la carotte, le lapin est la plus parfaite incarnation du mal" (R. Sheckley)
clean
Hors ligne
#3 Le 25/02/2011, à 23:58
- Regenesis
Re : Commande shell pour renommer des photos
Alors, par exemple :
En 2009, une série de 10 photos de poikilodermie, dont voici la 7ème, qui devrait être renommée ainsi :
09 0003 poikilodermie (7).JPG => poikilodermie (7).JPG
Mais s'il existe une seconde série de poikilodermie en 2011, il faudrait que :
09 0003 poikilodermie (7).JPG => poikilodermie 1 (7).JPG
et
11 0276 poikilodermie (7).JPG => poikilodermie 2 (7).JPG
de manière à éviter les doublons.
J'espère que c'est plus clair !
Hors ligne
#4 Le 26/02/2011, à 00:58
- superzlam
Re : Commande shell pour renommer des photos
Tu dois l exécuter dans le dossier racine ou se trouve l arborescence de tes photos, c est juste une ébauche je n ai rien testé, à mon avis c est correct. Tiens moi au courant.
PS: je débute en perl à tes risques et périls lol
#!/usr/bin/perl
@dossiers=`find . -maxdepth 1 -regex '.*\.jpg$'`;#récupération de tous les jpg dans une liste
my %patho;#liste des pathologie déjà rencontrée
`mkdir galerieWeb`;#création du dossier ou les photo seront copiée
for($i=0;$i<@dossiers;$i++){
$dossier[$i]=~/(\.(\/\w+\/)+)(\d{2})(\d+)(\w+)(\d+)/;#extraction des élement du nom grace à l expr reguliere
if(exists %patho{$4}){ #si la patho est deja ds la table on increment le num de la série
$patho{$4}++;
}else{
$patho{$4}=1;#sinon on crée une nvlle entré
}
`mv $dossier[$i] ../galerieWeb/$4.$patho{$4}.$5.".jpg"` #on copie l image avec le nv nom ds le dossier
}
Hors ligne
#5 Le 26/02/2011, à 03:11
- Bazoo
Re : Commande shell pour renommer des photos
Tu peux écrire un script bash assez facilement mais si tu veux quelques chose de plus avancé tu peux essayer pyRenamer (en graphique par contre)
Hors ligne
#6 Le 26/02/2011, à 09:18
- Regenesis
Re : Commande shell pour renommer des photos
@superzlam : merci pour ton script !!
Alors, il me renvoie l'erreur suivante :
[regenesis@regenesis-desktop:~/temp]$ sh temp.sh
temp.sh: 2: .@dossiers=: not found
temp.sh: 3: my: not found
temp.sh: 5: Syntax error: Bad for loop variable
@Bazzo : je vais aussi creuser du côté de pyRenamer, merci
Hors ligne
#7 Le 26/02/2011, à 16:06
- superzlam
Re : Commande shell pour renommer des photos
voila je l ai testé chez moi et il fonctionne. tu le met ds le repertoire racine tu fais un chmod u+x sur le script, puis tu l execute avec ./nomduscript. J espere avoir bien compris ce que tu voulais, ne t inquiete pas j ai fait en sorte qu il copie les photo puis les renomme, comme ça tu ne perd rien.
#!/usr/bin/perl
$ext="\.jpg\$";
@dossiers=`find . -maxdepth 2 -regex \.*$ext`;#récupération de tous les jpg dans une liste
my %patho;#liste des pathologie déjà rencontrée
$pwd=`pwd`;
`mkdir galerie`;
chomp $pwd;
$pwd=$pwd."\/galerie";
for($i=0;$i<@dossiers;$i++){
chomp $dossiers[$i];
$dossiers[$i]=~/\.\/(\w+\/)*\s*(\d{2})\s*(\d+)\s*(\w+)\s*(\d*)/;#extraction des élement du nom grace à l expr reguliere
if(exists $patho{$4}){ #si la patho est deja ds la table on increment le num de la série
$patho{$4}++;
}else{
$patho{$4}=1;#sinon on crée une nvlle entré
}
unless($5 eq ""){
$chem=$1.$2."\\ ".$3."\\ ".$4."\\ ".$5;
}else{
$chem=$1.$2."\\ ".$3."\\ ".$4;
}
$chem.=".jpg";
print "chemin ",$chem;
$nvNom=$4.$patho{$4}.$5.".jpg";
$dossiers[$i]=~/\.\/(\w+\/)*\s*((\d{2})\s*(\d+)\s*(\w+)\s*(\d*))/;
$anNom=$2.".jpg";
print "\nancien nom : ",$anNom,"\n";
print "nouveau nom : ",$nvNom,"\n";
`cp $chem $pwd;cd $pwd;mv $chem $pwd/$nvNom`;
}
Hors ligne
#8 Le 27/02/2011, à 09:02
- Regenesis
Re : Commande shell pour renommer des photos
Super, ça marche, merci beaucoup ;-)
Hors ligne