Renommer des fichiers en masse avec zmv sous zsh

Introduction

Vous avez des fichiers contenant des caractères spéciaux comme #, & ou @ dans leurs noms et souhaitez les remplacer en masse ? Le shell zsh dispose d'un outil puissant nommé zmv qui permet de renommer des fichiers de manière élégante et sécurisée.


Prérequis : charger zmv

La commande zmv n'est pas chargée par défaut dans zsh. Il faut d'abord l'activer :

autoload -U zmv

(Vous pouvez ajouter cette ligne dans votre fichier ~/.zshrc pour un chargement automatique)


Rechercher les fichiers concernés

Avant de renommer, identifions les fichiers contenant le caractère spécial. Par exemple, pour trouver tous les fichiers contenant # de façon récursive :

print -l **/*[#]*

Le double astérisque ** permet une recherche récursive dans tous les sous-répertoires.

(Note : le caractère # est placé entre crochets [#] car c'est un caractère spécial dans les patterns zsh)


Tester le renommage avec dry-run

Avant d'appliquer les modifications, utilisez l'option -n pour simuler l'opération sans rien modifier :

zmv -n '**/*[#]*' '${f//\#/No.}'

Cette commande affichera les renommages prévus sans les exécuter. Par exemple :

mv -- 'Track #01.mp3' 'Track No.01.mp3'
mv -- 'Album #2/Song #05.mp3' 'Album No.2/Song No.05.mp3'

Appliquer le renommage

Une fois satisfait du résultat du dry-run, retirez l'option -n pour exécuter réellement le renommage :

zmv '**/*[#]*' '${f//\#/No.}'

Comprendre la syntaxe


Autres exemples pratiques

Remplacer les espaces par des underscores

zmv '**/* *' '${f// /_}'

Remplacer & par "and"

zmv '**/*[&]*' '${f//&/and}'

Supprimer les parenthèses

zmv '**/*[()*' '${f//[()]/}'

Conclusion

La commande zmv est un outil indispensable pour le renommage en masse sous zsh. Pensez toujours à utiliser l'option -n pour tester vos commandes avant de les exécuter réellement, et n'oubliez pas d'échapper les caractères spéciaux dans vos patterns avec des crochets [ ].



↑ Haut de page