Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Renommer une liste de fichiers

13 réponses
Avatar
Olivier V
Bonjour,

J'ai une série de fichiers de la forme fichier.1 fichier.2 ...
que je souhaite renommer en fichier_im1.mps fichier_im2.mps ...

Même question pour pour fichier-1.pdf ... en fichier_im1.pdf

Mes progrès en bash étant toujours honteux, je m'adresse à vous.

Merci.

Olivier V

10 réponses

1 2
Avatar
Guillaume
Olivier V a wroté :
Bonjour,


Bonjour,

J'ai une série de fichiers de la forme fichier.1 fichier.2 ...
que je souhaite renommer en fichier_im1.mps fichier_im2.mps ...

Même question pour pour fichier-1.pdf ... en fichier_im1.pdf


Par exemple (à tester) :

#!/bin/bash
cd /mon/répertoire/kivabien/
for i in fichier-*.pdf;do
mv $i `echo $i | sed 's/fichier-/fichier_im/g'`
done

Pour le premier exemple, il faut probablement le faire en deux passes,
pour rajouter l'extension tout en conservant le chiffre.


Mes progrès en bash étant toujours honteux, je m'adresse à vous.



'Faut pas avoir honte, 'faut juste avoir les bonnes lectures :) :
http://www-gtr.iutv.univ-paris13.fr/Cours/Mat/Systeme/TDTP2003/tp03.html
http://www.softndesign.org/manuels/unix-2.html#toc-3
http://www.softndesign.org/manuels/unix-3.html

... et dans ce cas précis :
http://www.softndesign.org/manuels/unix-3.html#toc-3

HTH'


--
Guillaume

Avatar
Olivier V

Olivier V a wroté :
Bonjour,


Bonjour,

J'ai une série de fichiers de la forme fichier.1 fichier.2 ...
que je souhaite renommer en fichier_im1.mps fichier_im2.mps ...

Même question pour pour fichier-1.pdf ... en fichier_im1.pdf


Par exemple (à tester) :

#!/bin/bash
cd /mon/répertoire/kivabien/
for i in fichier-*.pdf;do
mv $i `echo $i | sed 's/fichier-/fichier_im/g'`
done


Merci pour l'idée, mais tous mes fichiers ne s'appelent pas "fichier"
c'était juste pour expliquer ce que je voulais.

En fait le tout sera intégré dans un autre script dans lequel "fichier"
correspond (et est accessible par) $prefixe.

J'ai essayé de mettre :
#!/bin/bash
prefixe=${1%.*}
for i in $prefixe-*.pdf;do
mv $i `echo $i | sed 's/$prefixe-/$prefixe_im/g'`
done

Mais ça ne fonctionne pas. Que faire ?

Pour le premier exemple, il faut probablement le faire en deux passes,
pour rajouter l'extension tout en conservant le chiffre.


Je verrai donc après.

'Faut pas avoir honte, 'faut juste avoir les bonnes lectures :) :


Merci.
Il y a des rudiments que je connais, mais sed m'est toujours aussi obscur.
Olivier V


Avatar
Matthieu Moy
Olivier V writes:

Bonjour,

J'ai une série de fichiers de la forme fichier.1 fichier.2 ...
que je souhaite renommer en fichier_im1.mps fichier_im2.mps ...

Même question pour pour fichier-1.pdf ... en fichier_im1.pdf


Voir la commande « rename » fournie avec perl.

rename 's/(.*).(.*)/$1_im$2.mps/' *.*

dans l'idée (non robuste, non testé).

--
Matthieu

Avatar
fabrice
Bonjour,

Mon scripting étant aussi honteux ... , je conserve !
Voici une petite participation à tester en espérant qu'elle puisse t'aider.
........
répertoire test
fichiers nommés fichier0XXX et vous voulez les renomer en toto XXX, il
suffit de tapper la commande suivante :

for i in fichier0*; do mv "$i" "toto ${i#photos0}"; done


bonne journée

"Olivier V" a écrit dans le message de news:

Bonjour,

J'ai une série de fichiers de la forme fichier.1 fichier.2 ...
que je souhaite renommer en fichier_im1.mps fichier_im2.mps ...

Même question pour pour fichier-1.pdf ... en fichier_im1.pdf

Mes progrès en bash étant toujours honteux, je m'adresse à vous.

Merci.

Olivier V


Avatar
Ph. Ivaldi
Le 15 mai 2007, Olivier V écrivit :

Bonjour,


Bonjour,

J'ai une série de fichiers de la forme fichier.1 fichier.2 ...
que je souhaite renommer en fichier_im1.mps fichier_im2.mps ...


find . -maxdepth 1 -type f -name "*.[0-9]*" -exec sh -c
'echo "renomme $0 en ${0%.*}_im${0##*.}.mps"' {} ;

Remplace 'echo "renomme ..."' par

'mv "$0" "${0%.*}_im${0##*.}.mps"'

si tu es content du résultat.
On peut se le faire récursif en supprimant l'option '-maxdepth'.
Si tu ne veux renommer que certains fichiers, modifie le "*.[0-9]*" en
conséquence.

Même question pour pour fichier-1.pdf ... en fichier_im1.pdf


Ligne de commande similaire à la précédente; un bon exercice.

Mes progrès en bash étant toujours honteux, je m'adresse à vous.


http://abs.traduc.org/abs-4.2.01-fr/ch09s02.html
--
Philippe Ivaldi, toujours débutant en bash.
http://piprim.tuxfamily.org/

Avatar
Fabien LE LEZ
On Tue, 15 May 2007 12:02:14 +0200, Olivier V :

J'ai une série de fichiers de la forme fichier.1 fichier.2 ...
que je souhaite renommer en fichier_im1.mps fichier_im2.mps ...


Si tu as 100 fichiers, tu peux essayer :

for i in $(seq 100)
do
mv fichier.$i fichier_im$i.mps
done

Même question pour pour fichier-1.pdf ... en fichier_im1.pdf


for i in $(seq 100)
do
mv fichier-$i.pdf fichier_im$i.pdf
done

Avatar
Ph. Ivaldi
Le 15 mai 2007, Olivier V écrivit :

J'ai essayé de mettre :
#!/bin/bash
prefixe=${1%.*}
for i in $prefixe-*.pdf;do
mv $i `echo $i | sed 's/$prefixe-/$prefixe_im/g'`
done

Mais ça ne fonctionne pas. Que faire ?


Déjà il ne faut pas utiliser $i mais "$i" pour ne pas planter sur des
noms contenant des espaces.
Ensuite analyse la sortie de ces commandes simples:
toto="Salut "
echo "$toto"
echo '$toto'
echo "$totoà toi"
echo "${toto}à toi"

--
PS: Je pense que fr.comp.os.unix est plus adapter pour les demandes de
scripts puisqu'il ne s'agit pas ici de configurations.
Philippe Ivaldi.
http://piprim.tuxfamily.org/

Avatar
Philippe Naudin
Le mardi 15 mai 2007 à 12:02:14,
Olivier V a écrit:

Bonjour,

J'ai une série de fichiers de la forme fichier.1 fichier.2 ...
que je souhaite renommer en fichier_im1.mps fichier_im2.mps ...
...
Mes progrès en bash étant toujours honteux, je m'adresse à vous.


En plus des réponses déjà données, il y a le très pratique cmv
(http://freshmeat.net/projects/cmv/), qui est un hélas script perl ce
qui fait que ma réponse est hors-sujet :)

Mais si tu es plus à l'aise avec les regexp qu'avec le shell :


Usage: cmv [OPTION...] PERL_EXPR FILENAME...

cmv renames multiple files in complex ways easily.

Options:
-d, --mkdir Create any directories necessary.
-n, --nonono Don't do it, just print 'mv' commands.
-q, --quiet Don't print the 'mv' commands.

This program applies PERL_EXPR to each FILENAME and then
renames all the files to the new filenames, being careful to
do it in the right order so that none of the files
disappear. File renaming loops are also handled correctly
by using a temporary name when necessary.

Cordialement,


--
Philippe Naudin
Cette adresse rejette le html, et les pièces attachées
avec une extension (exe|bat|pif|com|scr|zip).

Avatar
Olivier V

Le 15 mai 2007, Olivier V écrivit :

Bonjour,


Bonjour,

J'ai une série de fichiers de la forme fichier.1 fichier.2 ...
que je souhaite renommer en fichier_im1.mps fichier_im2.mps ...


find . -maxdepth 1 -type f -name "*.[0-9]*" -exec sh -c
'echo "renomme $0 en ${0%.*}_im${0##*.}.mps"' {} ;

Remplace 'echo "renomme ..."' par

'mv "$0" "${0%.*}_im${0##*.}.mps"'

si tu es content du résultat.


J'ai dû rajouter un espace à la fin de la première ligne, sinon j'avais une
erreur.

J'ai enlevé une * à "*.[0-9]*" (car sinon il traitait aussi les fichier du
type .1x (c'est tordu, et en fait je n'en ai pas, mais on ne sait jamais),
mais du coup, il ne traite plus les fichiers de la forme .12 (deux
chiffres). C'est rare que metapost fournisse plus de 10 fichiers, mais bon,
tant qu'on y est.

Par contre j'ai réussi à créer le deuxième script (pour les pdf) ...

J'ai donc :

#!/bin/bash

find . -maxdepth 1 -type f -name "*.[0-9]" -exec sh -c
'mv "$0" "${0%.*}_im${0##*.}.mps"' {} ;

find . -maxdepth 1 -type f -name "*-[0-9].pdf" -exec sh -c
'mv "$0" "${0%-*}_im${0##*-}"' {} ;

Olivier V


Avatar
Ph. Ivaldi
Le 15 mai 2007, Olivier V écrivit :

J'ai enlevé une * à "*.[0-9]*" (car sinon il traitait aussi les
fichier du type .1x (c'est tordu, et en fait je n'en ai pas, mais on
ne sait jamais), mais du coup, il ne traite plus les fichiers de la
forme .12 (deux chiffres). C'est rare que metapost fournisse plus de
10 fichiers, mais bon, tant qu'on y est.


Du coup j'apprends aussi à me servir un peu mieux de 'find'.

find . -maxdepth 1 -type f -regex ".*.[0-9]+" ..........

devrait le faire.

Par contre j'ai réussi à créer le deuxième script (pour les pdf) ...


Haaaaa!
Je suis bon pédagogue alors ;-)
--
Philippe Ivaldi.
http://piprim.tuxfamily.org/

1 2