[Shell/Linux] Renommer fichiers+numerotations

Résolu/Fermé
Taposk - 6 oct. 2011 à 11:48
 Taposk - 20 oct. 2011 à 14:13
Bonjour à tous,
J'ai un petit souci de débutant en shell.
Voilà, j'aimerai créer un sh qui me permette de renommer un groupe de fichiers jpg de la forme,

IMGP2345.jpg | IMGP2346.jpg | IMGP2347.jpg etc
en
IMG_0001.jpg | IMG_0002.jpg | IMG_0003.jpg

D'avance merci!


A voir également:

5 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
Modifié par Char Snipeur le 6/10/2011 à 12:26
Salut.
le plus simple pour moi, c'est d'utiliser une boucle for avec des nombres.
Seulement, quelques petites questions : connais tu le numéro de départ ?
Combien de fichiers ?
un truc dans le genre devrais fonctionné :
nb=$(wc -l $(ls IMGP*.jpg) )  
deb=2344 
for (( n=1;n<=nb;++n )) 
do : 
    if (( n<10 )) ;then :
       ext="000"$n 
    elif (( n<100 )) ;then :
       ext="00"$n 
    fi 
    mv IMGP$(deb+n).jpg IMG_$(ext).jpg 
done
Je n'ai pas testé, il y a surement pas mal d'erreurs de syntaxe, mais c'est l'idée.
La vrai soumission c'est quand les esclaves s'inquiètent du cours du coton.
Char Snipeur
1
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
6 oct. 2011 à 14:37
Salut,

#! /bin/bash

i=1
j=0000

for fic in IMG*
do
   k=${j}${i}
   #mv -v "${fic}" "${fic/P????/_${k: -4}}"
   echo "mv -v ${fic} ==>> ${fic/P????/_${k: -4}}"
   ((i++))
done

Si le résultat affiché à l'écran te satisfait, décommente la ligne
#mv -v "${fic}" "${fic/P????/_${k: -4}}"
et commente celle commençant par "echo".

;-))
1
Salut!
Merci de ta réponse!!
Je n'ai pas testé ta solution, mais il me semble qu'il risque d'y avoir un problème si j'ai un "trou" dans ma liste de fichiers.
Sachant que je souhaite renommer tous les fichiers du dossier est ce que quelque chose comme ça pourrait fonctionner?
nb=$(wc -l $(ls *.jpg) )  
$var=(ls *.jpg)

for (( n=1;n<=nb;++n )) 
do : 
    if (( n<10 )) ;then :
       ext="000"$n 
    elif (( n<100 )) ;then :
       ext="00"$n 
    fi 
    mv $var IMG_$(ext).jpg 
done
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
6 oct. 2011 à 14:25
Oui, ma réponse était soumise à conditions : d'où mes questions.
si tu n'as pas besoin de conserver l'ordre
n=0
for var in $(ls *.jpg) 
do : 
    (( n++ ))
    if (( n<10 )) ;then :
       ext="000"$n 
    elif (( n<100 )) ;then :
       ext="00"$n 
    fi 
    mv $var IMG_$(ext).jpg 
done
Ensuite avec les options de ls tu doit pouvoir les trier comme tu veux, ou alors conjuguer à 'sort'.
0
Merci beaucoup zipe31 et Char Snipeur!

zipe31, je garde ta solution sans trop la comprendre! Je l'ai légèrement modifiée:
for fic in *.JPG

Char Snipeur, j'ai appris quand même plein de choses et j'étais pas loin d'y arriver avec ta base!!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Bonjour!
J'up le sujet, j'ai en effet un petit souci!
Je souhaiterai conserver la structure proposée par Zipe31, mais qu'elle fonctionne pour n'importe quel patern de nom en *.JPG
Quelqu'un aurait une idée?
D'avance merci!!
:)
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
20 oct. 2011 à 13:33
Salut,

Il suffit de changer :
${fic/P????/_${k: -4}}
par :
${fic/\./_${k: -4}.}
0
Merci zipe!
En fait j'utilise toute sortes de paterns d'entrée genre: ABC_1234.JPG ou IMGP1234.JPG ou encore IMG_1234.JPG
C'est le problème du underscore, non? ... Avec ta solution, j'ai un résultat du type ABC_1234_0001.JPG
Si on imaginais plutôt de supprimer complêtement le nom pour avoir quelque soit les noms des images? Imaginons que j'ai plusieurs images avec plusieurs noms différents?
Je souhaiterais avoir en sortie un résultat du type IMG_0001.JPG IMG_0002.JPG etc etc...
0
zipe31 Messages postés 36402 Date d'inscription dimanche 7 novembre 2010 Statut Contributeur Dernière intervention 27 janvier 2021 6 407
20 oct. 2011 à 13:54
Ok, je me disais aussi ;-\

Essaye avec :

${fic/*\./IMG_${k: -4}.}
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
20 oct. 2011 à 13:54
le plus simple serait que zipe explique ce qu'il fait, histoire que tu puisse adapter.
0
Je crois que je commence à comprendre comment ça fonctionne, mais effectivement c'est pas super aisé comme ça et étant débutant dans le shell sans la moindre formation, c'est difficile de trouver tout seul!
En tout cas la dernière solution marche!
Merci à vous 2!
0