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 *