Git: Renommer en bloc des fichiers avec expression régulière

Dans cet article, je vais expliquer comment renommer en bloc des fichiers sous Git à partir d’une expression régulière. Récemment j’ai eu besoin de changer plusieurs fichiers de la forme YYYYMMDD.pdf vers YYYY-MM-DD.pdf, donc ajouter des tirets pour séparer les éléments d’une date.

Mon premier réflexe a été d’utiliser PowerRename qui fait partie des utilitaires de Microsoft PowerToys. Pour ceux qui ne connaissent pas, c’est un des projets à code source ouvert de Microsoft qui est disponible sur GitHub.

PowerRename avec expressions régulières
PowerRename avec expressions régulières

Le renommage des fichiers a fonctionné parfaitement, malheureusement Git n’est pas capable de reconnaitre les nouveaux fichiers comme étant les anciens qui sont renommés. Cela veut donc dire que l’historique serait complètement perdu. Il fallait que je trouve une autre solution.

Ma chasse à la commande magique venait de commencer. Comme tout bon développeur, j’ai passé pas mal de temps sur Stack Overflow. Je n’ai pas réussi à trouver exactement ce que je cherchais. Par contre, j’ai trouvé assez d’informations pour créer mon propre script:

#!/bin/sh
in_regex='^([0-9]{4})([0-9]{2})([0-9]{2})\.pdf$'
out_match='\1-\2-\3.pdf'

for file in $(git ls-files | grep -E $in_regex); do
    newname=`echo "$file" | sed -E "s/$in_regex/$out_match/"`
    git mv --verbose $file $newname
done

Je me suis servi de regular expressions 101 pour tester mon expression régulière à la ligne 2. Il est a noter que je me sers de l’option -E pour grep et sed dans le but d’utiliser les expressions régulières étendues. Le renommage est effectué par la commande git mv. N’oubliez pas de soumettre vos changements une fois le renommage complété.

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

*