Aujourd’hui, je partage un petit projet pratique que j’ai réalisé : un script PowerShell permettant de détecter automatiquement les doublons (triplons et plus) dans une arborescence de dossiers.
Contexte : la naissance du projet
Lors d’une mission pour la SNCF, un problème majeur m’a été remonté concernant la gestion documentaire :
“Notre GED (Gestion Électronique de Documents) contient sûrement un nombre incalculable de doublons, triplons, voire plus… Les mêmes documents ont été déposés plusieurs fois, parfois sous des noms différents. Mais ce qu’on pourrait déjà faire, ce serait d’identifier ceux qui portent le même nom. Pour le reste, on verra plus tard.”
En entendant cela, je me suis dit :
Parfait, j’ai tous les éléments dont j’ai besoin pour fixer mon nouvel objectif.
Je rassure aussitôt mon client :
“Ne vous inquiétez pas, il existe une solution.”
Curieux, il me demande :
“Ah bon ? Laquelle ?”
Je lui explique :
“Chaque document possède ce qu’on appelle un hash — une véritable empreinte numérique unique. Deux documents parfaitement identiques, même si l’un s’appelle toto.pdf et l’autre tata.pdf, peuvent être détectés grâce à ce hash.
Le hash se base sur le contenu réel du document, et non pas sur son titre, ce qui garantit une identification fiable à 100 %.”
Je termine en lui proposant :
“Laissez-moi quelques heures, je vous prépare un PoC (Proof of Concept) pour vous montrer concrètement la solution.”
Après quelques heures de développement et de tests, réalisés sur différents espaces documentaires (sur les serveurs et en local sur mon PC), je retourne voir mon client pour lui présenter mon Proof of Concept (PoC).
J’ouvre une fenêtre PowerShell, et je me rends dans le dossier de développement :
cd D:/MesFichiersADédupliquer
L’utilisation du script est simple. Il suffit de déposer le fichier detect_doublons.ps1 dans un dossier à analyser. Ici le dossier que nous analysons est MesFichiersADédupliquer et le script va traiter tout ce qu’il y a dedans.
Je lui explique que, pour le test, j’ai volontairement ajouté dans ce répertoire :
-
des fichiers uniques
-
des doublons
-
des triplons
-
et même un document identique décliné en 6 exemplaires sous 6 noms différents.
Puis, je lance simplement la commande depuis le terminal :
./detect_doublons.ps1
En quelques secondes, tous les doublons/triplons/etc. sont identifiés et listés comme prévu dans la console.
Le client, bluffé, me dit alors :
“C’est génial, il est formidable ton outil ! Mais… je n’y comprends rien à comment ça fonctionne.”
Je souris et lui réponds :
“Laissez-moi jusqu’à demain, je vais finaliser une version plus simple et plus pérenne.”
À ce moment-là, je décide que cet outil ne doit pas seulement être un script destiné aux initiés.
Mon objectif : il doit être utilisable par “Monsieur tout le monde”, sans aucune connaissance en programmation.
Pourquoi ? Parce que chaque équipe doit pouvoir vérifier son espace documentaire en toute autonomie, sans dépendre de moi ou d’un support technique.
Je veux que l’exécution soit ultra-simple (2 clics maximum) et que le résultat soit un fichier Excel (.csv) clair, listant automatiquement tous les doublons identifiés.
Un outil utile, fiable, user-friendly et prêt à être diffusé au plus grand nombre.
Le projet est maintenant finalisé. Le lancement se fait en 2 clics :
– Clic droit sur detect_doublons.csv
– Clic sur Exécuter avec PowerShell
Un fichier doublons.csv est alors généré après quelques secondes.
Le script :
-
Analyse tous les fichiers présents (et sous-dossiers).
-
Calcule un hash pour chaque fichier pour identifier les fichiers strictement identiques.
-
Génère un fichier .csv listant tous les documents identiques trouvés.
-
Inclut une procédure d’utilisation claire, adaptée même à des utilisateurs non techniques.
Voici le résultat du fichier Excel généré. J’ai mis délibérément en couleur les fichiers identiques. Ils contiennent le même hash.
Point particulier à prendre en compte :
-
L’identification ne fonctionne pas sur les fichiers zippés. Il faut bien veiller à dézipper toutes les archives.
Conclusion :
Un projet très simple mais efficace, qui met en avant des compétences techniques (stripping, gestion de fichiers, robustesse de la solution) mais également la capacité à penser usage utilisateur.