[RESOLU][Shell] Renuméroter en série

Renuméroter en série [RESOLU][Shell] - Shell/Batch - Programmation

Marsh Posté le 26-09-2011 à 12:09:25    

Bonjour,
 
J'ai un lot d'images de cette forme :
image_022.jpg
image_023.jpg
...
 
Je voudrais avoir ceci :
img_0.jpg
img_1.jpg
 
 
J'arrive à renommer image en img (pas très compliqué, en même temps...) mais je ne sais pas comment faire l'opération -22, ni comment supprimer le 0 dans 022, d'autant plus qu'il n'y est pas tout le temps : image_200.jpg
 
Ce que j'ai fait :
for i in image_*; do mv $i img_${i#image_};done
 
Si je fais :  
for i in image_*; do mv $i img_${i#image_-22};done
ça me donne :
img_image_022.jpg
en clair il n'aime pas du tout ce qu'il y a dans les accolades!
 
Si quelqu'un pouvait m'aider...


Message édité par berilia le 26-09-2011 à 16:52:16
Reply

Marsh Posté le 26-09-2011 à 12:09:25   

Reply

Marsh Posté le 26-09-2011 à 15:56:45    

La question n'est pas claire.
Il faut renommer image_022.jpg  en img_0.jpg ?
Ou bien renommer image_022.jpg  en img_22.jpg ?
 
Je vais supposer que c'est la deuxième hypothèse (et que c'est de l'Unix).
 
Pour récupérer 022, il faudrait découper la chaine de caractère du nom.
Peut-être qu'on peut supposer que le numéro se trouve toujours en position 7 à 10.
Donc on pourrait écrire le shell suivant :

ls -1 image*.jpg | while read old_name
do
   num_img=`echo ${old_name} | cut -b 7-9`
   new_name=`echo ${num_img} | awk '{printf("img_%d.jpg", $1)}'`
   mv ${old_name} ${new_name}
done


Message édité par olivthill le 26-09-2011 à 15:59:02
Reply

Marsh Posté le 26-09-2011 à 16:17:36    

Désolée, mais la première hypothèse était la bonne!
 
Je serais partie de image_000.jpg sinon^^
 
Il faut donc faire un -22 quelque part, je n'ai pas à m'inquiéter d'avoir un numéro négatif car j'ai supprimé les 21 premières images qui ne me servaient pas.
 
Sinon, oui, c'est bien de l'Unix

Reply

Marsh Posté le 26-09-2011 à 16:25:46    

Alors, c'est encore plus simple. Il n'y a pas besoin d'extraire le numéro.
Le programme devient :

num_img=0
ls -1 image*.jpg | while read old_name  
do  
   new_name=`echo ${num_img} | awk '{printf("img_%d.jpg", $1)}'`  
   mv ${old_name} ${new_name}  
   num_img=`expr $num_img + 1`
done

N.B. ls liste les fichiers par ordre alphabétique par défaut, donc les fichiers devraient être numérotés dans le bon ordre, sans se soucier de faire un moins vingt-deux.


Message édité par olivthill le 26-09-2011 à 16:27:45
Reply

Marsh Posté le 26-09-2011 à 16:51:51    

Ah, ça marche nickel merci beaucoup!

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed