Il m'arrive assez souvent d'avoir un paquet de fichiers dont le nom n'est pas comme je voudrais : présence d'espace ou l'extension en majuscule.
Comme je suis assez psycho-rigide et que j'aime que mes fichiers aient tous un nom uniformisé, j'utilise souvent des logiciels permettant le mass renaming, c'est à dire que tous les noms sont modifiés en une fois.
Deux de ces logiciels ont ma préférence : Thunar, parce que c'est intégré dans le gestionnaire de fichiers et que c'est bien pratique, et Metamorphose parce qu'il est très complet (possibilité de renommer d'après les tags exifs des photos par exemple) et qu'il est disponible en paquet debian bien que non dans les dépôts (je suis une feignasse qui n'aime pas compiler des logiciels, si ce n'est en dernier recours).
Ces deux logiciels sont très bien mais comme j'utilise en ce moment un window manager dont un des buts est de se passer d'interface graphique (Xmonad, pour ne pas le nommer), je cherchais un logiciel en ligne de commande pour faire ce genre de chose.
Et là, magie ! Je viens de découvrir que la commande Perl rename est disponible toute seule dans le shell.
Du coup, à moi les expressions régulières et un résultat super rapide en ligne de commande !
Le fonctionnement est très simple. Par exemple, pour remplacer tous les espaces par des underscore dans les noms de mes fichiers .tex (ce n'est qu'un exemple : je n'ai évidemment aucun espace dans mes noms de fichiers) :
rename 's/ /_/g' *.tex
Vous voyez, c'est tout bête : une regexp et un(e?) wildcard pour indiquer quels fichiers traiter (vous pouvez aussi donner une liste de fichiers, ou rien du tout pour entrer les noms des fichiers en mode interactif). Pour plus de détails, comme d'hab : lisez le man !
Je vous parlerai bientôt d'autres outils en ligne de commande pour en remplacer d'autres en interface graphique.
Pratique en effet, je ne connaissais pas (j’en suis resté au for).
J’ai une énigme : comment virer automatiquement des caractères qui ne sont pas reconnus par le shell ? En effet, il arrive que des fichiers qui viennent d’autres systèmes (et d’utilisateurs peu avertis des conventions de nommages), présentent des caractères qui sont affichés sous forme de points d’interrogation par le bash, tant il ne sait pas les interpréter. Evidemment, impossible de se contenter de faire remplacer les points d’interrogation (puisque ça ne marche pas), et curieusement des régles du genre ^[:alnum:] (<= ceci n’est pas un lien) ne fonctionnent pas. Pour ma part je n’ai tenté qu’avec du sed, et je n’ai jms réussi.
A la poubelle bash, rename arrive parfaitement à reconnaitre que ces caractères foireux ne sont pas des caractères alpha numériques. Tu m’as résolu un pb qui me saoûle une fois par mois, merci.
Heureux que ça t’ait servi. Comme on dit chez nous :