Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#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)
wink

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) smile

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

teke a écrit :

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 smile

Dernière modification par naholyr (Le 20/02/2007, à 11:28)

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

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

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...