Documentation technique complète pour mettre en place un outil de nettoyage de métadonnées (fichiers Office, PDF, Vidéos, Images).
Avant toute chose, mettez à jour votre système et installez les dépendances nécessaires au traitement des différents formats de fichiers.
sudo apt update && sudo apt upgrade -y
sudo apt install -y libimage-exiftool-perl ffmpeg qpdf python3-pip
On crée le dossier principal sur le Bureau qui va contenir tous nos scripts et les fichiers à traiter.
cd ~/Bureau
mkdir Nettoyage_Metadonnees
cd Nettoyage_Metadonnees
Création d'un environnement virtuel Python et installation des bibliothèques nécessaires pour manipuler les documents Office.
sudo apt install python3-venv
python3 -m venv env_cleaner
source env_cleaner/bin/activate
pip install python-docx python-pptx openpyxl
Créez le dossier qui va recevoir les fichiers à nettoyer, puis créez le fichier bash de lancement.
mkdir a_nettoyer
nano lancer.sh
Copiez ce contenu exact dans le fichier lancer.sh. Ce script s'occupe de lancer Python, trouver la clé USB et déplacer les fichiers finaux.
#!/bin/bash
# Partie 1 ---- lancer du nettoyage
cd "$(dirname "$0")"
source env_cleaner/bin/activate
python3 script_nettoyage.py
# Partie 2 ---- recherche USB pour couper/coller
user=$(whoami)
CLE_PATH=$(ls /media/$user/ 2>/dev/null | head -n 1)
if [ -z $CLE_PATH ]; then
echo "ATTENTION : Aucune clé USB détectée."
echo "Les fichiers resent dans le dossier 'fichiers_propres' sur l'ordinateur."
else
NOM_DOSSIER="Nettoyage_$(date +%Hh%M_%d-%m-%Y)"
DESTINATION=/media/$user/$CLE_PATH/$NOM_DOSSIER
echo "Clé détectée : $CLE_PATH"
echo "Dépacement des fichiers vers la clé..."
mkdir -p "$DESTINATION"
mv ./fichiers_propres/* $DESTINATION/ 2>/dev/null
mv ./nettoyage_complet.log $DESTINATION 2>/dev/null
echo "Tout a été déplacé sur la clé."
fi
# Partie 3 ---- nettoyage du répertoire a_nettoyer
echo "----------------------------------"
echo "Voulez-vous vider le dossier 'a_nettoyer' ? (o/n)"
read confirmation
if [ "$confirmation" = "o" ]; then
rm -rf ./a_nettoyer/*
echo "Dossier 'a_nettoyer' vidé."
fi
echo "----------------------------------"
echo "Traitement terminé. Appuyer sur Entrée."
read
Rendez votre script bash exécutable pour pouvoir le lancer facilement par la suite.
chmod +x lancer.sh
Nettoyage_Metadonnees (sur le bureau).Créez le fichier script_nettoyage.py dans le dossier principal et copiez-y le code ci-dessous.
import os
import shutil
import subprocess
import logging
from pathlib import Path
# Imports pour les documents Office
from docx import Document
from pptx import Presentation
import openpyxl
# --- CONFIGURATION ---
SOURCE_DIR = "./a_nettoyer"
OUTPUT_DIR = "./fichiers_propres"
LOG_FILE = "nettoyage_complet.log"
logging.basicConfig(
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s',
handlers=[logging.FileHandler(LOG_FILE), logging.StreamHandler()]
)
# --- FONCTIONS DE NETTOYAGE OFFICE ---
def clean_docx(path):
doc = Document(path)
p = doc.core_properties
p.author = p.category = p.comments = p.content_status = ""
p.identifier = p.keywords = p.language = p.last_modified_by = ""
p.subject = p.title = p.version = ""
doc.save(path)
def clean_pptx(path):
prs = Presentation(path)
p = prs.core_properties
p.author = p.category = p.comments = p.content_status = ""
p.identifier = p.keywords = p.language = p.last_modified_by = ""
p.subject = p.title = p.version = ""
prs.save(path)
def clean_xlsx(path):
wb = openpyxl.load_workbook(path)
p = wb.properties
p.creator = p.title = p.description = p.subject = ""
p.keywords = p.category = p.contentStatus = ""
p.lastModifiedBy = p.identifier = p.language = ""
wb.save(path)
# --- FONCTIONS SYSTÈME (IMAGE, VIDEO, PDF) ---
def clean_generic_exif(path):
"""Utilisé pour Images et vieux formats (.doc, .xls)"""
cmd = ['exiftool', '-all=', '-overwrite_original', str(path)]
subprocess.run(cmd, capture_output=True)
def clean_video(in_path, out_path):
"""Vidéo sans perte (copy stream)"""
cmd = ['ffmpeg', '-y', '-i', str(in_path), '-map_metadata', '-1', '-c', 'copy', str(out_path)]
subprocess.run(cmd, capture_output=True)
def clean_pdf(path):
"""Nettoyage PDF via QPDF"""
cmd = ['qpdf', '--linearize', '--replace-input', str(path)]
subprocess.run(cmd, capture_output=True)
# --- BOUCLE PRINCIPALE ---
def process_all():
src_base = Path(SOURCE_DIR).resolve()
out_base = Path(OUTPUT_DIR).resolve()
for root, _, files in os.walk(src_base):
for file_name in files:
file_path = Path(root) / file_name
rel_path = file_path.relative_to(src_base)
target_path = out_base / rel_path
target_path.parent.mkdir(parents=True, exist_ok=True)
ext = file_path.suffix.lower()
try:
# 1. VIDÉOS (Traitement spécial car nécessite un fichier de sortie différent)
if ext in ['.mp4', '.mkv', '.mov', '.avi']:
clean_video(file_path, target_path)
logging.info(f"[VIDEO] Nettoyé : {rel_path}")
continue
# 2. COPIE DU FICHIER VERS DESTINATION (Avant modification)
shutil.copy2(file_path, target_path)
# 3. TRAITEMENT SELON EXTENSION
if ext == '.docx':
clean_docx(target_path)
logging.info(f"[OFFICE] Docx nettoyé : {rel_path}")
elif ext == '.pptx':
clean_pptx(target_path)
logging.info(f"[OFFICE] Pptx nettoyé : {rel_path}")
elif ext == '.xlsx':
clean_xlsx(target_path)
logging.info(f"[OFFICE] Xlsx nettoyé : {rel_path}")
elif ext == '.pdf':
clean_generic_exif(target_path)
clean_pdf(target_path)
logging.info(f"[PDF] Nettoyé : {rel_path}")
elif ext in ['.jpg', '.jpeg', '.png', '.tiff', '.doc', '.xls', '.ppt']:
clean_generic_exif(target_path)
logging.info(f"[EXIF] Nettoyé (Image/OldOffice) : {rel_path}")
else:
logging.info(f"[COPIE] Format non géré, copié tel quel : {rel_path}")
except Exception as e:
logging.error(f"[ERREUR] Impossible de nettoyer {rel_path} : {str(e)}")
# En cas d'erreur de la lib Python, on assure au moins une copie brute
if not target_path.exists():
shutil.copy2(file_path, target_path)
if __name__ == "__main__":
if not Path(SOURCE_DIR).exists():
print(f"Dossier {SOURCE_DIR} introuvable.")
else:
process_all()
print(f"Terminé. Arborescence créée dans {OUTPUT_DIR}")
Voici la procédure complète pour utiliser votre outil de nettoyage :
Branchez une clé USB avec vos documents ou répertoires à nettoyer. Copiez-les dans le dossier a_nettoyer (sur le Bureau).
Faites un clic droit sur lancer.sh et choisissez "Exécuter comme programme". Suivez les instructions à l'écran.
Attendez la fin du script. Vous pourrez choisir de vider automatiquement le dossier source à la fin.
Le script opère en 3 grandes étapes automatisées :
fichiers_propres en respectant l’arborescence source. Les documents non pris en charge sont juste copiés en l’état.
fichiers_propres et du log (nettoyage_complet.log) sur la clé USB connectée dans un dossier nommé Nettoyage_heure_date-du-jour.
a_nettoyer.