Renommer plusieurs fichiers simultanément sous Linux et Windows en ligne de commande
Je viens de recevoir des fichiers html réalisés par mon graphiste et je dois les intégrer en php.
La première chose à faire, avant de lancer le codage, est de changer l’extension html des fichiers par php.
S’il y a moins de 10 fichiers, faire le changement à la main est rapide. Mais s’il y a plus de 10 fichiers (en l’occurrence 50) à modifier, un petit script va faire l’affaire :
Sous Windows
Nous allons utiliser l’invite de commande et la commande MsDos ren :
Invite cmd
cd path/to/the/directory/contining/the/files REM echo > index.html && echo > index2.html && echo > index3.html && echo > index4.html # ligne facultative dir ren *.html *.php dir
Sous Linux
Nous allons utiliser le shell et la commande rename :
Shell
cd path/to/the/directory/contining/the/files # touch index.html index2.html index3.html index4.html # ligne facultative ls -l rename 's/\.html$/\.php/' *.html ls -l
La syntaxe sous Linux est plus compliquée que sous Windows…
Comment fonctionne la commande rename ?
remane perlexpr [files]
Après quelques recherches sur le net, et mes connaissances en Regex PHP, voilà ce qu’il faut déduire :
- perlexpr : il s’agit d’une expression régulière perl. Elle a la forme suivante s/expr1/expr2/[gi] :
- s : lance le regex en perl pour réaliser une Subtitution
- / : séparateur
- expr1 : il faut remplacer .html se trouvant obligatoirement à la fin du nom de fichier : \.html$
- / : séparateur
- expr2 : par .php (\.php)
- / : séparation de motif
- [gi] cette option non utilisée ici
- files : la liste des fichiers sur laquelle la commande rename doit intervenir *.html (ce qui est aussi un REGEX 🙂 )
La commande rename se lit donc dans l’ordre inverse :
rename 's/\.html$/\.php/' *.html
- pour tous les fichiers finissant par .html (le deuxième argument donné : *.html)
- tu vas effectuer une substitution en appliquant la règle décrite dans perlexpr : remplacer .html obligatoirement à la fin de la chaine de caractère par .php (le premier argument : ‘s/\.html$/\.php/’)
Autres idées sur le sujet :
- Mettre en minuscule les extensions pour les fichiers images
- mettre les dimensions des images dans le nom du fichier
- Réaliser un rename de manière recursive
- Remplacer les espaces par des tirets
- Remplacer les caractères accentués par des caractères non accentuées
- Réaliser rename avec find et mv