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 :
- Parcours : Utilise
os.walk(src)pour parcourir récursivement tous les sous-répertoires et fichiers du répertoire source (src). - Création du chemin : Construit le chemin de destination (
dest_dir) et le crée si nécessaire. - Filtrage : Ignore les non-fichiers et les chemins contenant des éléments cachés (e.g.,
.git/,.cache/). - 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).
- Copie : Utilise
shutil.copy2pour prĂ©server les mĂ©tadonnĂ©es (comme l’heure de modification).
- Parcours : Utilise
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.txtpar 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 :
- Lecture des chemins : Lit le fichier texte (
paths_file), récupÚre les chemins, et ignore les lignes vides. - 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.walkest 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Ă©.
- VĂ©rification d’existence : Si le chemin n’existe pas, un avertissement (
- Finalisation : Affiche un message de succĂšs (
â).
- Lecture des chemins : Lit le fichier texte (
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_MeteoSi la troisiĂšme ligne est incluse, le rĂ©pertoireAPI_Meteoet 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
- Ăditer les variables
sourceetdestinationdans le blocif __name__ == "__main__":pour spécifier les chemins de votre sauvegarde. - Exécuter : python save.py
Exécution de zip_1.py
- Créer un fichier texte nommé
zip.txt(ou celui spécifié parPATHS_FILENAME). - Remplir ce fichier avec les chemins absolus ou relatifs des fichiers et répertoires à archiver, un chemin par ligne.
- Ăditer la variable
OUTPUT_ZIP_FILENAMEsi vous souhaitez un nom d’archive diffĂ©rent. - ExĂ©cuter : python zip_1.py
0 commentaire