Renommer ses répertoires et ses fichiers en masse avec Python

Je viens de terminer un programme en Python qui m’a donné bien du fil à retordre. Mais au bout du compte, je suis très satisfait du résultat car le code effectue exactement ce que je voulais. Ce programme renomme en masse automatiquement tous les fichiers et répertoires qui ont dans leur nom, des espaces, des apostrophes ou des lettres avec des diacritiques utilisées en français et en allemand. Par exemple, un fichier nommé Hôtel de ville de L’Haÿ-les-Roses.png va être renommé :

Hotel_de_ville_de_L_Hay-les-Roses.png

Pour votre gouverne personnelle, sachez que L’Haÿ-les-Roses partage avec trois autres communes françaises la très rare particularité d’avoir un nom comportant un ÿ. Les trois autres communes sont Moÿ-de-l’Aisne, Faÿ-lès-Nemours et Aÿ-Champagne. Autre exemple, voici ce que je viens de créer :

Les noms des répertoires et du fichier représentant Loui XVI, sauvagement décapité il y a 229 ans jour pour jour, sont bourrés de signes diacritiques. J’exécute mon programme Python en lui passant un paramètre qui est le chemin absolu du répertoire à analyser. Compte tenu du fait que ce dernier contient un espace, je l’entoure de guillemets.

./rename_files  "/home/benoit/Benoît Miamondo"

Et voici le résultat obtenu instantanément :

Benoit_Miamondo, zbiF_sfe, aeeoe, fYjac, Caeei_gc.png

Plus aucun espace, plus aucune diacritique ou apostrophe! L’idée m’est venue de coder ce programme en voyant les noms de fichiers et répertoires de ma compagne. Il y avait des espaces, des apostrophes et des accents de toutes sortes.

Or, il faut savoir que ce genre de fantaisie n’est pas conseillé. Pourquoi? Parce qu’un script Bash qui a besoin du nom du répertoire en paramètre, va découper Cours de francais en trois paramètres et le script ne s’exécutera pas. Exemple, voici un script qui se contente d’afficher ses paramètres dans la console.

 #!/bin/bash

 # Nom du script : script.sh 

 echo $1

Je l’exécute:

./script.sh  Cours de français

Résultat : Cours

Ce n’est pas ce que je voulais… En fait, sous Unix, un espace est interprété comme un séparateur. Pour éviter ce genre de désagrément, vous avez deux possibilités:

  • Utiliser des guillemets mais il s’agit d’une intervention manuelle que l’ordinateur ne fera pas à votre place.
./script.sh  "Cours de français"

Résultat : Cours de français

  • Renommer le répertoire Cours_de_francais et le problème est résolu.
./script.sh  Cours_de_francais

Résultat : Cours_de_francais

C’est la meilleure solution. Veuillez noter également que la lettre ç (tout comme les autres lettres avec un signe diacritique) n’est pas une bonne idée. Il vaut mieux se contenter de lettres normales et de quelques caractères standard tels que le tiret bas par exemple. En revanche, les majuscules ne posent pas de problème. Voici donc comment il aurait fallu nommer le répertoire :

Cours_de_francais

Le programme en Python rename_files.py

Analysons le code de mon programme ensemble. Il se divise en trois parties:

  1. Le dictionnaire de lettres comportant des signes diacritiques en français et en allemand,
  2. la collecte de tous les fichiers et répertoires qu’il va falloir renommer,
  3. le renommage avec shutil.move().

Mon programme prend obligatoirement un argument, à savoir le chemin absolu du répertoire qui sera parcouru de manière récursive. Dans ce cas, toutes les lettres avec un signe diacritique, un espace ou une apostrophe que l’on trouve dans les clés du dictionnaire Letters, seront remplacées par leurs valeurs respectives.

./rename_files.py  /home/benoit/Documents

Si vous voulez ne remplacer qu’une seule lettre, par exemple le é par e, voici comment il faut exécuter le script :

./rename_files.py  /home/benoit/Documents  é  e

Si vous voulez remplacer les apostrophes par des tirets bas, il faut « échapper » l’apostrophe.

./rename_files.py  /home/benoit/Documents  \'  _

Et si le chemin absolu du répertoire à parcourir contient un espace, alors il faut utiliser les guillemets.

./rename_files.py  "/home/benoit/Documents/Codes  Python"    # Remplacement de toutes les clés du dictionnaire par leurs valeurs
./rename_files.py  "/home/benoit/Documents/Codes  Python"  "  "  _      # Remplacement des espaces par un tiret bas

Petite précision qui a son importance :

Ne vous amusez pas à exécuter ce script en tant que root pour parcourir les fichiers système car votre ordinateur risque de ne pas trop apprécier ce genre d’excentricité.

Quelle a été la partie du code la plus difficile?

Le renommage proprement dit, car en parcourant un répertoire de manière récursive, vous êtes dans une boucle. Vous commencez par renommer le premier répertoire et déjà les problèmes commencent… Tous les chemins des sous-répertoires et fichiers ne correspondent plus aux chemins que vous avez collectés dans la liste paths. shutil.move() les a modifiés! Par conséquent, à chaque tour de boucle, il faut prendre soin de modifier par anticipation, dans la liste paths, tous les répertoires parents pour que leurs nouveaux noms correspondent à ce que shutil.move() a modifié! Donc, si cette partie du code vous semble obscure, sachez que c’est le cas pour moi également!

Le code de mon programme en version pdf

Ventoy, la clé USB d’installation multiboot

Ventoy est une application qui permet de créer une clé USB d’installation multiboot, c’est-à dire que vous pouvez y placer par simple glisser-déposer, plusieurs images iso de distributions linux. Ventoy est une application 100 % libre qui a le gros avantage de fonctionner aussi bien avec Linux qu’avec Windows.

Lire la suite de « Ventoy, la clé USB d’installation multiboot »

Préparer une clé USB d’installation

SOMMAIRE

  1. Connecter une clé USB
  2. Télécharger l’image iso
  3. Se déplacer dans le répertoire qui contient l’image iso
  4. Quelques explications

Source de l’image illustrant l’article

Lorsque vous aurez décidé de basculer sur Linux et lorsque vous aurez choisi une distribution, il faudra télécharger une image iso de celle-ci et l’installer sur une clé USB d’installation. Voici la procédure. Elle est fort simple mais elle nécessite d’avoir dans son entourage quelqu’un qui a déjà un ordinateur équipé d’une distribution Linux. Si ce n’est pas le cas, vous pouvez demander dans le forum du site internet de la distribution, la marche à suivre pour se procurer une clé USB d’installation. Il y aura forcément quelqu’un qui vous renseignera. Et en dernier recours, vous pouvez taper acheter+clé+USB+installation+Linux dans votre moteur de recherche préféré. Nul doute que vous trouverez votre bonheur.

Lire la suite de « Préparer une clé USB d’installation »

Choisir une distribution Linux

SOMMAIRE

  1. Pour les débutants
  2. Pour les utilisateurs confirmés
  3. Pour les utilisateurs expérimentés

Linux est une famille de distributions dont le code-source est placé sous licence libre. Cela signifie que tout un chacun peut le modifier comme bon lui semble. Linux compte des centaines de distributions différentes. Pour s’en convaincre, il suffit d’aller faire un tour sur le site distrowatch qui les recensent toutes dans un classement. À ce jour, on en compte 276! Mais le noyau dur est constitué d’une petite vingtaine seulement. Les autres ne sont que des projets plus ou moins farfelus ou confidentiels qui sont la conséquence de la liberté octroyée par la licence.

Lire la suite de « Choisir une distribution Linux »

Configurer son clavier avec xmodmap

Source de l’image illustrant l’article

Bonjour,

Utiliser un clavier allemand avec un système dont la locale est paramétrée en français, n’est pas chose aisée. Je suis dans ce cas de figure et ce que je trouve le plus pénible, ce sont les lettres accentuées ou qui n’existent pas dans l’autre langue. En allemand, il n’y a qu’une lettre qu’on ne retrouve pas en français, c’est le ß qui correspond à ss. Quant aux lettres accentuées allemandes, Il en existe seulement trois enrichis d’un seul diacritique: ä, ö, et ü.

Lire la suite de « Configurer son clavier avec xmodmap »

Synchroniser ses ordinateurs avec Rsync

Prérequis : installer et autoriser ssh.

Si, comme moi, vous possédez plusieurs ordinateurs et que vous souhaitez non seulement sauvegarder mais également synchroniser vos données personnelles, alors Rsync est l’outil qu’il vous faut. Rsync signifie Remote synchronisation, c’est-à-dire Synchronisation à distance.

Lire la suite de « Synchroniser ses ordinateurs avec Rsync »

Hello Apple, thanks to Linux, I am still alive…

Bonjour,

En février 2018, Il y a bientôt quatre ans, je mettais en ligne l’article ci-dessous. Il était intitulé:

12,90 € suffisent pour ressusciter un ordinateur en phase terminale d’obsolescence

Il racontait l’histoire d’un ordinateur de la marque Apple soit-disant définitivement obsolète (à moins de sortir le porte-monnaie) et qui est revenu à la vie grâce à Linux. Quatre ans après, le moribond pète la forme…

Lire la suite de « Hello Apple, thanks to Linux, I am still alive… »

i3, gestionnaire de fenêtres en mosaïque

Aujourd’hui, grâce au logiciel i3, j’ai découvert un aspect de l’informatique de bureau que je ne connaissais pas. i3 est un gestionnaire de fenêtres en mosaïque. Très léger, il a la particularité de se « piloter » avec le clavier, même si l’utilisation de la souris reste toujours possible pour redimensionner les fenêtres par exemple, et bien sûr pour naviguer à l’intérieur de celles-ci. Je suis un adepte de la simplicité volontaire et j’ai vite été séduit par cet outil épuré mais très efficace.

Lire la suite de « i3, gestionnaire de fenêtres en mosaïque »