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
- **/*[#]* : pattern de recherche récursif pour les fichiers contenant #
- ${f//\#/No.} : substitution zsh où f représente le fichier trouvé, et //\#/No. remplace toutes les occurrences de # par "No."
- [#] : classe de caractères pour échapper le # dans le pattern
- \# : échappement du # dans la substitution
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