Rechercher : dans
Par :

(bash) scripter pour renommer

Dernière réponse le 28 oct 2009 à 17:03:36 fractalux, le 25 oct 2009 à 15:48:02 
 Signaler ce message aux modérateurs

Bonjour,
je débute en bash et je voulais faire le script suivant.

J'ai une liste d'images avec plein de noms différents "imageski004.JPG, photo 1.jpg, etc."

et je voulais les renommer ainsi

titre_01.jpg
titre_02.jpg
etc.

où "titre" est passé en argument

./renomimg titre

J'ai commencé :

#! /bin/bash

# Mise en minuscules .JPG > .jpg
for i in *.JPG 
	do mv "`echo $i`" "`echo $i | sed "/.JPG/s//.jpg/"`" ; 
done

k=1 ;

# image-au-pif.jpg en titre_1.jpg
for i in *.jpg
	do mv "`echo $i`" "`echo "$1_$k.jpg"`" ;
	let "k=$k + 1"
done


mais là, ça donne titre_1.jpg, titre_2.jpg, etc.

Je bloque un peu pour leur donner la forme titre_01.jpg (ou titre_001.jpg)

Je pensais faire un truc du genre

do mv "`echo $i`" "`echo $i.jpg | sed "/_(nb d'1 seul chiffre).jpg/s//_0(le même chiffre).jpg/"`" ; 


Mais je ne sais pas quoi mettre dans les parenthèses !
Configuration: Linux
Firefox 3.0.14

Meilleures réponses pour « (bash) scripter pour renommer » dans :
Comment récupérer le résultat d'une commande dans une variable VoirComment récupérer le résultat d'une commande dans une variable Préambule Syntaxe Exemples Préambule Il est bien souvent nécessaire de récupérer le résultat d'une commande (ou de son code retour) dans une variable afin de pouvoir...
Comment lire un fichier ligne par ligne VoirComment lire un fichier ligne par ligne Préambule Boucle while Syntaxe Exemple Astuces Bonus Boucle for Syntaxe Préambule Une des erreurs les plus communes dans l'apprentissage des scripts "bash" sous GNU/LInux pour lire un fichier...
Exécuter un script shell VoirExécution d'un script Pour pouvoir exécuter un script ou un programme en ligne de commande il y a plusieurs possibilités : 1. Le chemin absolu 2. Le chemin relatif 3. Modifier la variable PATH Note: Le Sha...

1

lami20j, le 25 oct 2009 à 19:09:08

Salut,

Essaie ça
J'ai créer deux fichiers selon ton exemple et j'ai mis un contenu pour vérifier.
Tu peux configurer le format de printf en fonction de nombre de tes photos.

$ ls -l
total 8
-rw-r--r-- 1 lami20j lami20j 6 oct 25 19:55 imageski004.JPG
-rw-r--r-- 1 lami20j lami20j 6 oct 25 19:55 photo 1.jpg
$ cat imageski004.JPG
image
lami20j@debian:~/jpg$ cat photo\ 1.jpg
photo
$ l=0;for i in $(ls *.[Jj][Pp][Gg]|tr " "  _);do l=$(($l+1));mv -v "${i/_/ }" "$(printf "titre_%04d.jpg" $l)";done
`imageski004.JPG' -> `titre_0001.jpg'
`photo 1.jpg' -> `titre_0002.jpg'
$ ls -l
total 8
-rw-r--r-- 1 lami20j lami20j 6 oct 25 19:55 titre_0001.jpg
-rw-r--r-- 1 lami20j lami20j 6 oct 25 19:55 titre_0002.jpg
$ cat titre_0001.jpg
image
$ cat titre_0002.jpg
photo


106485010510997108

Répondre à lami20j

2

fractalux, le 27 oct 2009 à 00:07:57

Ok merci.

Du coup mon code ressemble à ça.

# Mise en minuscules .JPG > .jpg
for i in *.JPG  ; 
	do mv "`echo $i`" "`echo $i | sed "/.JPG/s//.jpg/"`" ;  
done

k=1 ;

for i in *.jpg
	do mv -v "$i" "$(printf "$1_%03d.jpg" $k)" ;
	let "k=$k + 1" ;
done


Je vais essayer d'adapter mon nombre de chiffres en fonction du nombre d'images...

Répondre à fractalux

3

lami20j, le 27 oct 2009 à 06:03:12

Salut,

As-tu essayé la commande que je t'ai donnée?
Elle fait ce que tu demandes.
C'est inutile la partie minuscules pour l'extension. Il suffit de chercher les JPG et jpg et le renommer avec l'extension jpg tout simplement.
Pas besoin de les renommer d'abord en jpg et ensuite en titre_NNN.jpg 106485010510997108

Répondre à lami20j

4

 fractalux, le 28 oct 2009 à 17:03:36

Oui oui, c'est grâce à toi que j'ai fait ce script. C'est vrai que c'est inutile de renommer en minuscule. J'ai adapté ce que tu m'as donné parce que je voulais utiliser $1 au lieu de "titre" dans le code et que je m'emmêlais avec les " " et "_".

Merci beaucoup en tout cas...

Répondre à fractalux