Cette documentation présente deux scripts Python distincts conçus pour faciliter les opérations de sauvegarde : le premier pour la synchronisation de répertoires (save.py), et le second pour la création d’archives ZIP à partir d’une liste de chemins (zip_1.py).


1️⃣ Script save.py : Synchronisation de Répertoires

Le script save.py implémente une logique de synchronisation de base pour copier les fichiers d’un répertoire source vers un répertoire de destination. Il utilise une vérification par taille et par hachage (SHA256) pour déterminer si une copie est nécessaire, ce qui est plus robuste qu’une simple vérification de la date de modification.

🌟 Fonctionnalités

  • Copie différentielle : Ne copie un fichier que s’il n’existe pas dans la destination, si sa taille est différente, ou si son hachage SHA256 est différent.
  • Création de structure : Assure la création des sous-répertoires nécessaires dans la destination.
  • Exclusion de fichiers : Ignore les entrées qui ne sont pas des fichiers réguliers.
  • Exclusion de chemins cachés : Exclut les fichiers ou répertoires cachés (ceux contenant /.[^/]+/ dans leur chemin relatif).

⚙️ Structure du Code

file_hash(path, algo="sha256", chunk_size=8192)

  • Description : Calcule le hachage d’un fichier spécifié.
  • Utilité : Permet une vérification d’intégrité fiable pour s’assurer que le contenu du fichier source est identique à celui du fichier destination. Le hachage est calculé par blocs (chunk_size) pour gérer efficacement les fichiers volumineux.
  • Algorithme par défaut : SHA256.

sync_directories(src, dst)

  • Description : Le cœur de la logique de synchronisation.
  • Processus :
    1. Parcours : Utilise os.walk(src) pour parcourir récursivement tous les sous-répertoires et fichiers du répertoire source (src).
    2. Création du chemin : Construit le chemin de destination (dest_dir) et le crée si nécessaire.
    3. Filtrage : Ignore les non-fichiers et les chemins contenant des éléments cachés (e.g., .git/, .cache/).
    4. Vérification de la Copie :
      • Si le fichier n’existe pas dans la destination : Copie (new).
      • S’il existe, mais que la taille est différente : Copie (size).
      • Si la taille est identique, mais que le hachage est différent : Copie (hash).
    5. Copie : Utilise shutil.copy2 pour préserver les métadonnées (comme l’heure de modification).

Bloc d’Exécution (if __name__ == "__main__":)

  • Configuration par défaut :
    • source = "/home/pi"
    • destination = "/media/pi/SAVE"
  • Mise en garde : Ces chemins doivent être ajustés par l’utilisateur pour correspondre à son environnement (typiquement un Raspberry Pi avec un périphérique de stockage externe monté sur /media/pi/SAVE).

2️⃣ Script zip_1.py : Création d’Archive ZIP par Liste

Le script zip_1.py est conçu pour créer une archive ZIP en incluant tous les fichiers et répertoires listés dans un fichier texte externe. Il offre une méthode flexible pour archiver des éléments disparates du système de fichiers.

🌟 Fonctionnalités

  • Archivage sur liste : Lit les chemins d’accès à partir d’un fichier spécifié (zip.txt par défaut).
  • Support des Fichiers et Répertoires : Ajoute des fichiers individuels ou archive récursivement le contenu de répertoires entiers.
  • Compression : Utilise la compression standard zipfile.ZIP_DEFLATED.
  • Gestion des Erreurs : Signale les chemins introuvables et gère les erreurs générales.

⚙️ Structure du Code

create_zip_from_list(paths_file, output_zip_name)

  • Paramètres :
    • paths_file : Le chemin vers le fichier texte qui liste les chemins à archiver (un par ligne).
    • output_zip_name : Le nom de l’archive ZIP à créer.
  • Processus :
    1. Lecture des chemins : Lit le fichier texte (paths_file), récupère les chemins, et ignore les lignes vides.
    2. Itération : Pour chaque chemin listé :
      • Vérification d’existence : Si le chemin n’existe pas, un avertissement (⚠️) est affiché.
      • Si c’est un Fichier : Le fichier est ajouté directement à la racine de l’archive ZIP.
      • Si c’est un Répertoire : os.walk est utilisé pour parcourir récursivement tous les fichiers à l’intérieur du répertoire. Chaque fichier est ajouté à l’archive en conservant sa structure de répertoire relative au parent du chemin listé.
    3. Finalisation : Affiche un message de succès ().

Bloc d’Exécution (if __name__ == "__main__":)

  • Configuration par défaut :
    • PATHS_FILENAME = "zip.txt" (Le fichier qui doit contenir la liste des chemins, un par ligne).
    • OUTPUT_ZIP_FILENAME = "api_meteo.zip" (Le nom du fichier ZIP créé).
  • Exemple de contenu pour zip.txt :/home/user/document.pdf /var/log/syslog /home/user/Projets/API_Meteo Si la troisième ligne est incluse, le répertoire API_Meteo et tout ce qu’il contient seront archivés.

🚀 Utilisation des Scripts

Prérequis

  • Python : Les deux scripts nécessitent un environnement Python standard (3.x recommandé).
  • Permissions : L’utilisateur exécutant les scripts doit avoir les permissions de lecture sur les fichiers sources et de lecture/écriture sur la destination.

Exécution de save.py

  1. Éditer les variables source et destination dans le bloc if __name__ == "__main__": pour spécifier les chemins de votre sauvegarde.
  2. Exécuter : python save.py

Exécution de zip_1.py

  1. Créer un fichier texte nommé zip.txt (ou celui spécifié par PATHS_FILENAME).
  2. Remplir ce fichier avec les chemins absolus ou relatifs des fichiers et répertoires à archiver, un chemin par ligne.
  3. Éditer la variable OUTPUT_ZIP_FILENAME si vous souhaitez un nom d’archive différent.
  4. Exécuter : python zip_1.py

Source save.py

Python

Source zip_1.py

Python

Catégories : Non classé

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 *