GNT sans publicité, site mobile, fonctionnalitées exclusives...

Shell : renommer des fichiers avec numéros

Le
Olivier Miakinen
Bonjour,

Soit un répertoire comportant des fichiers nommés par exemple
photo7.png, photo13.png, photo239.png ou photo3535.png.

Je voudrais renommer les fichiers dont le numéro est inférieur
à 100 afin que ce numéro soit représenté sur trois chiffres :
photo007.png et photo013.png. Je sais le faire en générant un
script (grâce à vim) contenant tous les « mv » qui vont bien,
mais je suis sûr que ça doit pouvoir se faire en une ligne de
shell (ou peut-être deux, une pour les nombres à un chiffre
et une pour les nombres à deux chiffres).

Quelqu'un saurait me dire comment faire ?

Note : par défaut j'utilise bash, mais si c'est plus simple je
peux lancer un autre shell.

Cordialement,
--
Olivier Miakinen
Lire les 27 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 6
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Stephane Chazelas
Le #24207241
2012-01-30 16:07:32 +0100, Olivier Miakinen:
Bonjour,

Soit un répertoire comportant des fichiers nommés par exemple
photo7.png, photo13.png, photo239.png ou photo3535.png.

Je voudrais renommer les fichiers dont le numéro est inférieur
à 100 afin que ce numéro soit représenté sur trois chiffres :
photo007.png et photo013.png. Je sais le faire en générant un
script (grâce à vim) contenant tous les « mv » qui vont bien,
mais je suis sûr que ça doit pouvoir se faire en une ligne de
shell (ou peut-être deux, une pour les nombres à un chiffre
et une pour les nombres à deux chiffres).

Quelqu'un saurait me dire comment faire ?

Note : par défaut j'utilise bash, mais si c'est plus simple je
peux lancer un autre shell.


[...]

Avec zsh:

autoload -U zmv
zmv 'photo(
--
Stephane
Olivier Miakinen
Le #24207391
Bonjour,

Le 30/01/2012 18:28, Stephane Chazelas m'a répondu :

Soit un répertoire comportant des fichiers nommés par exemple
photo7.png, photo13.png, photo239.png ou photo3535.png.

Je voudrais renommer les fichiers dont le numéro est inférieur
à 100 afin que ce numéro soit représenté sur trois chiffres :
photo007.png et photo013.png. [...]



Avec zsh:

autoload -U zmv
zmv 'photo(


Merci de ta réponse, et de cette occasion que tu m'offres
de découvrir zsh. Je n'ai pas encore bien compris comment
fonctionne autoload (j'ai juste vu qu'avant ça, zmv n'est
pas connu, et qu'après c'est une 'shell function'), ni la
syntaxe des options de zmv.

J'ai quand même trouvé la doc de zmv dans 'man zshcontrib',
et je l'ai lancé avec l'option -n. Bien m'en a pris, car
j'ai vu que les nombres à 4 chiffres seraient tronqués à
trois (photo3535.png -> photo535.png).

Quoi qu'il en soit, je vais continuer à chercher par moi-même,
mais si je pouvais avoir une explication des deux commandes
ci-dessus ça me ferait plaisir !

Cordialement,
--
Olivier Miakinen
Lucas Levrel
Le #24208661
Le 30 janvier 2012, Olivier Miakinen a écrit :
Soit un répertoire comportant des fichiers nommés par exemple
photo7.png, photo13.png, photo239.png ou photo3535.png.

Je voudrais renommer les fichiers dont le numéro est inférieur
à 100 afin que ce numéro soit représenté sur trois chiffres :
photo007.png et photo013.png. Je sais le faire en générant un
script (grâce à vim) contenant tous les « mv » qui vont bien,
mais je suis sûr que ça doit pouvoir se faire en une ligne de
shell (ou peut-être deux, une pour les nombres à un chiffre
et une pour les nombres à deux chiffres).

Quelqu'un saurait me dire comment faire ?

Note : par défaut j'utilise bash, mais si c'est plus simple je
peux lancer un autre shell.



Bonjour,

Indépendamment du shell, tu peux utiliser mmv :
mmv 'photo[0-9].*' 'photo00#1.#2'
mmv 'photo[0-9][0-9].*' 'photo0#1.#2'

--
LL
Alain Ketterlin
Le #24208761
Olivier Miakinen
Soit un répertoire comportant des fichiers nommés par exemple
photo7.png, photo13.png, photo239.png ou photo3535.png.

Je voudrais renommer les fichiers dont le numéro est inférieur
à 100 afin que ce numéro soit représenté sur trois ch iffres :
photo007.png et photo013.png. Je sais le faire en générant un
script (grâce à vim) contenant tous les « mv » qui vo nt bien,
mais je suis sûr que ça doit pouvoir se faire en une ligne de
shell (ou peut-être deux, une pour les nombres à un chiffre
et une pour les nombres à deux chiffres).



Hors les solutions subtiles proposées ici, j'imagine que ce que tu fais
en vim est transposable en sed (ou autre), dont tu peux piper le
résultat à bash, non ?

-- Alain.
Cyrille Lefevre
Le #24208891
Le 30/01/2012 16:07, Olivier Miakinen a écrit :
Bonjour,

Soit un répertoire comportant des fichiers nommés par exemple
photo7.png, photo13.png, photo239.png ou photo3535.png.

Je voudrais renommer les fichiers dont le numéro est inférieu r
à 100 afin que ce numéro soit représenté sur trois chiffres :
photo007.png et photo013.png. Je sais le faire en générant un
script (grâce à vim) contenant tous les « mv » qui vont bien,
mais je suis sûr que ça doit pouvoir se faire en une ligne de
shell (ou peut-être deux, une pour les nombres à un chiffre
et une pour les nombres à deux chiffres).

Quelqu'un saurait me dire comment faire ?



surement !

Bonjour,

for i in photo*.jpg; do
# on vire le suffixe
j=${i%.jpg}
# on vire le prefix
j=${j#photo}
# on vire les 0 pour éviter l’interprétation en octal
j=${j#0}
j=${j#0}
# pour les valeurs > 1000
# j=${j#0}
# dés fois qu'il n'y ai plus rien
j=${j:-0}
# j pour les comparaisons et
# k avec les 0
k=$j
# ajout dunb de zéro nécessaire
(( j < 10 )) && k=0$k
(( j < 100 )) && k=0$k
(( j < 1000 )) && k=0$k
# la cible existe-t-elle ?
[[ -f "photo$k.jpg" ]] ||
# non, no renomme
mv "$i" "photo$k.jpg"
done

en voila
Cordialement,

Cyrille Lefevre.
--
mailto:Cyrille.Lefevre-news%
supprimer "%nospam% et ".invalid" pour me repondre.
remove "%nospam" and ".invalid" to answer me.
Publicité
Suivre les réponses
Poster une réponse
Anonyme