« Rename »: Comment renommer plein de fichiers en une seule commande ?

Rename_linux

Qui n’a jamais pesté de devoir changer le nom de plein de fichiers en devant se les « fader un par un  » ?
C’est le cas sous Windows avec son menu contextuel « clic-droit et renommer ». Si vous avez 500 fichiers ,bah faudra renouveler l’opération 500 fois, à moins de passer par un logiciel tiers ou de « scripter » en Powershell, batch ou autres langages interprétés tels que python ou perl.
J’y vois là une sacrée différence avec la manière de procéder sous un système d’exploitation open source tel que linux.
La commande « rename » permet de faire en une seule fois le boulot et ceci en quelques secondes en fonction du nombre de fichiers à traiter . Pas plus de parlote , let’s go & see !

Plantons le décor

De retour de vacances , la carte SD chargée de vos meilleurs souvenirs, vous la déchargez sur le PC. En général, les photos ont un nom standard avec au mieux la date de la prise:

Bon pour ceux qui souhaiteraient tester la commande sans avoir à insérer leur carte SD, je vous invite à faire:

mkdir /home/user/Images/photos

touch 20161210_{1..10}.jpg

On crée 10 fichiers photos, ca fera l’affaire pour la suite des commandes et leur manipulation.

Rename : la commande magique

-Vérifier que la commande existe bien sur son système

whereis rename

Ca devrait vous renvoyer le chemin :

rename: /usr/bin/rename /usr/bin/rename.ul /usr/share/man/man2/rename.2.gz /usr/share/man/man1/rename.1.gz

Sinon:

apt-get install rename

Ensuite un ptit « man rename » pour s’apercevoir que la commande permet de prendre en paramètre des expressions régulières.

Et ca croyez moi c’est du « très efficace » 🙂

Se placer dans le répertoire qui contient les photos à traiter:

cd /home/user/Images/photos

Renommer avec préfixe

Rajouter le préfixe « vacances_Lyon_2016 »

rename -n ‘s/^/vacances2016_/’ *.jpg

rename -n => l’option « -n » permet de visualiser les effets de la commande sur le renommage des fichiers sans pour autant les renommer pour de vrai.
Je recommande fortement si vous ne voulez pas pleurer par la suite ^_^

Décortiquons ‘s/^/vacances2016_/’  :

« s »= substitute => on va remplacer une chaîne par une autre

/^/=> les « slash » délimitent la première chaîne. Le « ^ » signifie en début de chaîne => c’est ce qui fait le « préfixe » par la suite.

/vacances2016_/=> les « slash » délimitent la chaîne de substitution qui va être placée en début de chaque nom de fichier.

Voici le résultat:

rename_tofs1

Même démarche si on avait voulu « suffixer » c’est à dire placer la chaine de caractères à la fin du nom de fichier juste avant l’extension « .JPG »

rename ‘s/.jpg$/_vacances2016.JPG/’ *

« $ »=> fin de la ligne

Tout ce qui se termine par .jpg est remplacé par le suffixe « _vacances2016.JPG »

Renommer minuscules en majuscules

Pour plus de lisibilité, vous décidez de mettre en majuscules les noms des photos.

rename ‘y/a-z/A-Z/’ *.jpg

Décortiquons  ‘y/a-z/A-Z/’ :

« y »=> permet la « translitterration »…la quoi?? en fait ca veut juste dire permet la transcription lettre par lettre. Chaque lettre sera prise et changée en fonction d’un modèle. Ici le nouveau modèle(« pattern ») c’est la Majuscule.

a-z=>en regex ce sont  les 26 lettres de l’alphabet qui sont matchées. C’est à dire n’importe quelle longueur de chaine de caractères contenant des lettres minuscules

A-Z=> même remarque mais pour les majuscules

Voici le résultat:

rename_tofs2

Conclusion:

Ce genre de manipulation de fichiers est aussi possible en bash avec des commandes comme « find« .
Mais je trouve ça bien moins intuitif et simple que la commande « rename » rapide et efficace pour obtenir ce que l’on souhaite sans se prendre la tête . On pourrait même envisager de combiner les actions avec un logiciel comme Zenity.

Be the first to comment

Leave a Reply

Votre adresse de messagerie ne sera pas publiée.


*