[Shell/Linux] Renommer fichiers+numerotations [Résolu/Fermé]

Signaler
-
 Taposk -
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!


5 réponses

Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 263
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
5 978
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

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
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 263
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'.
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!!
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!!
:)
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
5 978
Ok, je me disais aussi ;-\

Essaye avec :

${fic/*\./IMG_${k: -4}.}
Messages postés
9688
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
2 octobre 2020
1 263
le plus simple serait que zipe explique ce qu'il fait, histoire que tu puisse adapter.
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!
Messages postés
36299
Date d'inscription
dimanche 7 novembre 2010
Statut
Contributeur
Dernière intervention
27 janvier 2021
5 978
Pour mieux comprendre le mécanisme il faut te référer au man bash et à la partie "Remplacement des paramètres".