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:
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:
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.
Leave a Reply