1. Présentation Générale

SyncVision Pro est un utilitaire de synchronisation de fichiers robuste développé en Python. Il permet de maintenir une copie exacte (miroir) d’un répertoire source vers un répertoire de destination. L’application intègre une interface graphique intuitive (GUI) et utilise des algorithmes de hachage pour garantir l’intégrité des données.

Points clés :

  • Synchronisation intelligente : Compare la taille et le hash (SHA-256) des fichiers pour éviter les copies inutiles.
  • Mode Miroir Intégral : Option permettant de supprimer automatiquement les fichiers et dossiers dans la destination qui n’existent plus dans la source.
  • Multi-threading : L’interface reste fluide pendant les opérations de copie grâce à l’exécution des tâches en arrière-plan.
  • Persistance : Sauvegarde automatiquement vos derniers chemins et réglages dans un fichier config.json.

2. Prérequis et Installation

Environnement

  • Python : Version 3.x installée.
  • Système d’exploitation : Windows, macOS ou Linux.

Bibliothèques requises

Le script utilise principalement la bibliothèque standard de Python. Cependant, selon votre installation de Python (notamment sur Linux), vous pourriez avoir besoin d’installer explicitement tkinter.

Installation via PIP : Le script n’utilise pas de bibliothèques tierces (comme requests ou pandas), donc aucune installation de module externe n’est strictement requise via pip pour les fonctionnalités de base.

Toutefois, si vous êtes sur Ubuntu/Debian, assurez-vous d’avoir Tkinter :

Shell

3. Architecture du Code

L’application est structurée autour d’une classe principale SyncApp qui gère trois aspects critiques :

  1. Le Thread de Calcul (run_sync_worker) : Scanne les répertoires, compare les fichiers et exécute les copies.
  2. Le Thread de Nettoyage (delete_worker) : Gère la suppression sécurisée des éléments orphelins en mode miroir.
  3. La File d’attente UI (ui_queue) : Assure une communication thread-safe entre la logique de synchronisation et l’interface graphique.

4. Fonctionnalités Détaillées

Interface Utilisateur

  • Source / Destination : Champs de saisie avec explorateur de fichiers intégré.
  • Tableau de Bord des Stats : Visualisation en temps réel (Compteur bleu pour le total, vert pour les copies, gris pour les doublons ignorés, rouge pour les suppressions).
  • Console Log : Historique détaillé de chaque action effectuée (Log en vert sur fond noir type terminal).

Algorithme de Comparaison

Pour chaque fichier, l’application vérifie dans cet ordre :

  1. Existence : Si le fichier n’existe pas, il est copié.
  2. Taille : Si la taille diffère, il est mis à jour.
  3. Empreinte Numérique (Hash) : Si les tailles sont identiques, un hash SHA-256 est calculé pour détecter une modification interne du contenu.

5. Mode d’Emploi

  1. Lancement : Exécutez le script avec la commande python app.py.
  2. Configuration :
    • Sélectionnez votre dossier Source (vos fichiers originaux).
    • Sélectionnez votre dossier Destination (votre sauvegarde).
  3. Option Miroir :
    • Décoché : Ajoute les nouveaux fichiers et met à jour les modifiés.
    • Coché : Rend la destination identique à la source (supprime ce qui est en trop).
  4. Exécution : Cliquez sur « Lancer la synchronisation ». Une barre de progression indique l’avancement global.
  5. Confirmation : Si le mode miroir est actif, une fenêtre de confirmation listera le nombre d’éléments à supprimer avant d’agir.

6. Sécurité et Limitations

  • Sécurité : Le script ignore les fichiers et dossiers cachés (commençant par un point .) pour éviter de corrompre des configurations système (ex: .git, .DS_Store).
  • Gestion des erreurs : En cas de fichier verrouillé ou de permissions insuffisantes, l’erreur est capturée et affichée dans la console de log sans interrompre le reste du processus.
  • Intégrité : L’utilisation de shutil.copy2 permet de conserver les métadonnées (dates de création/modification) des fichiers originaux.

Source

Catégories : Python

0 commentaire

Laisser un commentaire

Emplacement de l’avatar

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