#1 Le 18/02/2007, à 23:29
- Piero29
Cherche script pour modifier partiellement le nom d'un fichier
Bonjour,
queslqu'un aurait-il un petit script permettant de modifier partiellement le nom de tous les fichiers d'un répertoire?
Pratiquement, je cherche à remplacer les fichiers IMAG001.jpg, IMAG002.jpg, etc récupérés sur un appareil photo numérique. J'aimerais remplacer la partie IMAG00 par autre chose, tout en gardant les numéros de photos (ex IMAG001 > linux01.jpg).
Merci d'avance.
Pierre
#2 Le 18/02/2007, à 23:44
- Skippy le Grand Gourou
Re : Cherche script pour modifier partiellement le nom d'un fichier
rename 's/IMAG00/linux0/' *.jpg
(change la chaîne de caractère "IMAG00" en "linux0" dans tous les fichiers jpg)
Hors ligne
#3 Le 19/02/2007, à 13:11
- Piero29
Re : Cherche script pour modifier partiellement le nom d'un fichier
Merci, je teste ça tout de suite.
#4 Le 19/02/2007, à 21:13
- teke
Re : Cherche script pour modifier partiellement le nom d'un fichier
génial...
j'essaie de faire en sorte que le la chaîne de renommage soit de 01 à 99... est-ce que la chose est possible ? J'ai tenté plusieurs script à base de ls awk printf... mais j'ai toujours une erreur avec le printf...
Serait-il possible de le faire avec rename ?
#5 Le 19/02/2007, à 23:15
- itsmokes
Re : Cherche script pour modifier partiellement le nom d'un fichier
for i in {10..99};do mv imag0$i.jpg imag$i.jpg;done
devrait le faire (syntaxe bash)
Hors ligne
#6 Le 20/02/2007, à 01:28
- teke
Re : Cherche script pour modifier partiellement le nom d'un fichier
Merci beaucoup, je vais voir comment l'intégrer dans ma ligne de commande qui est déjà bien longue... (^_^)
-- édit --
Oui, mais non (^_^)
En fait j'ai :
ls -A *.shtml | awk '{num=NR;system("mv "$1" "num".shtml")}'
et le problème est bien d'intégrer le zero devant les chiffres 1 à 9...
Je cherche encore, je cherche
Dernière modification par teke (Le 20/02/2007, à 09:50)
#7 Le 20/02/2007, à 09:59
- teke
Re : Cherche script pour modifier partiellement le nom d'un fichier
Et bien en faisant ainsi cela fonctionne très bien, mais ce n'est pas du tout élégant... j'apprécierai une formule plus élégante et pédagogique...
ls -A *.txt | awk '{num=NR;system("mv "$1" "num".txt")}' && for i in {1..9};do mv $i.txt 0$i.txt;done
#8 Le 20/02/2007, à 11:19
- naholyr
Re : Cherche script pour modifier partiellement le nom d'un fichier
génial...
j'essaie de faire en sorte que le la chaîne de renommage soit de 01 à 99... est-ce que la chose est possible ? J'ai tenté plusieurs script à base de ls awk printf... mais j'ai toujours une erreur avec le printf...Serait-il possible de le faire avec rename ?
Ben renommer IMG0XX en biduleXX (XX allant de 01 à 99), c'est simplement rename 's/IMG0/bidule/' *.jpg sur le modèle de la première réponse
Dernière modification par naholyr (Le 20/02/2007, à 11:28)
Messagerie instantanée : naholyr@jabber.fr
Envoyer vos images sur le web d'un clic !
Choix du système à rebooter (graphique)
Hors ligne
#9 Le 20/02/2007, à 11:52
- teke
Re : Cherche script pour modifier partiellement le nom d'un fichier
Je dois être obtus... je ne vois pas où c'est évident... Un petit exemple :
mkdir essais
for i in {a..p} ; do touch essais/$i.l ; done
Comment faire pour renommer cette structure en fichier allant de 01.l à 16.l ???
avec le système que j'ai donné plus ça le fait... mais c'est pas très élégant...
Dernière modification par teke (Le 20/02/2007, à 11:53)
#10 Le 20/02/2007, à 12:56
- naholyr
Re : Cherche script pour modifier partiellement le nom d'un fichier
Ben ça n'est pas ce que tu as expliqué au départ, toi tu souhaites un renommage qui marche ainsi :
a.x => 01.x
b.x => 02.x
etc...
C'est ça ?
Sinon c'est simple, rename 's/A/B/' fichiers remplace A par B (expressions régulières) dans tous les fichiers.
Mais pour des renommages beaucoup plus complexes (comme ce que tu sembles souhaiter faire) évidemment qu'il n'y a pas de solution triviale, et qu'il faut passer par la cumulation de plusieurs commandes.
Après si tu veux simplement rajouter des 0 si nécessaires, c'est trèèès simple. Imaginons que tu as A1.jpg, A2.jpg, A3.jpg, ..., A15.jpg, et tu veux obtenir A01.jpg, A02.jpg, ..., A15.jpg :
rename 's/A\([0-9]\)\.jpg/A0$1.jpg/' *.jpg
Messagerie instantanée : naholyr@jabber.fr
Envoyer vos images sur le web d'un clic !
Choix du système à rebooter (graphique)
Hors ligne
#11 Le 20/02/2007, à 13:01
- teke
Re : Cherche script pour modifier partiellement le nom d'un fichier
Ok et merci beaucoup !!!
Pour l'instant la ligne si dessous (ou les deux en fait qui sont concaténées) fonctionne bien... mais j'aimerais pouvoir la réduire à une seule ligne...
ls -A *.txt | awk '{num=NR;system("mv "$1" "num".txt")}'
for i in {1..9};do mv $i.txt 0$i.txt;done
#12 Le 20/02/2007, à 14:04
- naholyr
Re : Cherche script pour modifier partiellement le nom d'un fichier
Je ne peux pas tester (pas de Linux sous la main) mais peut-être
ls -A *.txt | awk '{num=NR;system("mv "$1" "num".txt")}' | rename 's/[0-9]\.txt/0$0/' *.txt
Messagerie instantanée : naholyr@jabber.fr
Envoyer vos images sur le web d'un clic !
Choix du système à rebooter (graphique)
Hors ligne
#13 Le 20/02/2007, à 15:40
- itsmokes
Re : Cherche script pour modifier partiellement le nom d'un fichier
$ for i in {1..99};do if [ $i -lt 10 ];then mv $i.txt 00$i.txt;else mv $i.txt 0$i.txt;fi;done
là, st'un peu plus complexe, mais ça devrait répondre à ce que tu veux en une seule ligne de commande.
Hors ligne
#14 Le 20/02/2007, à 17:37
- teke
Re : Cherche script pour modifier partiellement le nom d'un fichier
Merci beaucoup à tous deux! Passionnante recherche en vérité !!!
Je vais de voir m'arrête jusqu'à jeudi matin...
pour l'instant j'en suis là, grâce à vous :
ls -A CA*.h | awk '{system("if [ "NR" -lt 10 ];then nom=0"NR";else nom="NR";fi; mv "$1" "$nom"")}'
le seul problème, est cela fait une heure et demie que je cherche... est que pour une raison que je ne comprend pas les variables $1 et $nom renvoient la même valeur...