Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1649 connectés 

  FORUM HardWare.fr
  Programmation
  Shell/Batch

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

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

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

n°2103326
berilia
Posté le 26-09-2011 à 12:09:25  profilanswer
 

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
mood
Publicité
Posté le 26-09-2011 à 12:09:25  profilanswer
 

n°2103354
olivthill
Posté le 26-09-2011 à 15:56:45  profilanswer
 

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
n°2103367
berilia
Posté le 26-09-2011 à 16:17:36  profilanswer
 

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

n°2103374
olivthill
Posté le 26-09-2011 à 16:25:46  profilanswer
 

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
n°2103384
berilia
Posté le 26-09-2011 à 16:51:51  profilanswer
 

Ah, ça marche nickel merci beaucoup!


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Shell/Batch

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

 

Sujets relatifs
[Excel-VBA] Rajouter Série .newseriesouvrir une communication série (usb) en C
VBA Trier date min max d'une serie de donnéesbatch msdos et port série
Problème de gestion de la liaison série RS232 en VHDL[Self-Résolu] Port Série (COM) et WriteFile()
[VB] Lecture du port sérieRenuméroter numéro de facture ayant des "trous"
Convertir un série de caractères pour le charset UTF-8probleme de communication série
Plus de sujets relatifs à : [RESOLU][Shell] Renuméroter en série


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR