Synchronisation de répertoires

Soyez le premier à donner votre avis sur cette source.

Vue 10 750 fois - Téléchargée 597 fois

Description

Pour résumer rapidement, ce petit programme en python synchronise des dossiers de sauvegarde et des dossiers auxquels vous tenez.
Pour l'instant il ne s'utilise qu'en ligne de commandes, mais je persiste à penser qu'il est tout de même assez facile d'emploi.

Voilà un cas simple typique d'utilisation :
-----------------------------------------
Vous avez un dossier où vous mettez toutes vos sources perso et ça vous briserait le cœur de les perdre. Le code
python sync.py -f C:/Programmation -d ["G:/backup"] -r -n 10
créera G:/backup/Programmation et y copiera tous les fichiers, sous-dossiers etc (-r pour récursif) de C:/Programmation. Si vous modifiez un de vos fichiers et resynchronisez les deux dossiers, le fichier correspondant sur G:/ ne sera pas perdu, il sera renommé afin de laisser la place à la nouvelle version. Ici "-n 10" indique que chaque fichier a le droit à 10 versions sauvegardées.
Et si vous avez deux disques durs :
python sync.py -f C:/Programmation -d ["G:/backup", "H:/bAcKuP"] -r -n 10
Bref, je pense que ce petit exemple est assez clair. Pour avoir toutes les options possibles, tapez : python sync.py -h

Un cas un peu plus automatique :
------------------------------
je me sers de ce programme pour mes sources, mes photos etc. Je souhaitais donc automatiser son usage ! :)
C'est chose faite avec auto_sync.py et ASync.bat.
ASync.bat se lance au branchement du disque dur, lance auto_sync.py qui lit le fichier SYNC.conf, crée SYNC_ready.conf et lance : python sync.py SYNC_ready.conf.
Chaque ligne de SYNC_ready.conf contient les arguments que vous mettriez en ligne de commande. La seule différence avec SYNC.conf est que dans SYNC.conf, vous pouvez (euh, devez en fait) mettre %s au lieu du dossier courant, étant donné que vous ne savez pas encore quelle lettre sera donnée au disque externe.

------------------------------
Je joins un exemple de fichier SYNC.conf pour que ce soit plus clair. ASync.bat doit aussi être adapté à vos besoins.

Source / Exemple :


<ASync.bat, sur mon disque dur externe :>

cd backup
python auto_sync.py
PAUSE

Conclusion :


J'utilise ce programme et n'ai détecté aucun bogue. Cela dit, il n'en est sans doute pas exempt et vos remarques seront les bienvenues.
Il met 1 min pour vérifier 30 Go de données (en supposant qu'il n'y a rien à changer).

Codes Sources

A voir également

Ajouter un commentaire Commentaires
Messages postés
19
Date d'inscription
mardi 30 septembre 2008
Statut
Membre
Dernière intervention
3 août 2009

Bonisoir Baouh,
je pense que c'est effectivement l'origine du problème : je ne me suis jamais penché sur Python 3, mais il me semble que print y devient une fonction : print()
Du coup, la syntaxe serait effectivement fausse. Je travaille avec Python 2.6.
Bon, je n'ai pas trop compris ton histoire de clé USB et de serveur de fichiers. Tu fais passer tous les fichiers zotero sur ta clé et tu la copies sur tous tes ordis, c'est ça ? Le script peut effectivement te permettre de faire cela, et de façon automatique, avec ASync.bat.
Par contre, le script ne fusionne pas les fichiers. Impossible, donc, de modifier un fichier sur plusieurs ordis simultanément. Je ne sais pas si cela a une importance dans ton cas.

bonne soirée

PS : merci pour dropbox et zotero : ces prgms ont l'air intéressants :)
Messages postés
3
Date d'inscription
mercredi 6 mai 2009
Statut
Membre
Dernière intervention
17 mai 2009

re-salut,
J'ai fait un premier test et je n'arrive toujours pas à utiliser ton script. En ouvrant ton script et en lançant le shell, j'ai un message "invalid syntax" et me surligne le second guillement double de la ligne 81 :
print "ERROR: file %s could not be sync" % filesrc

Avant de chercher plus loin, j'utilise la version 3.0.1 de Python, est-ce que ça peut être l'origine du problème ?

Quoiqu'il en soit, je n'ai pas réussi à faire un test de ton script comme l'exemple donné. Est-ce que tu vois une explication ?

Pour t'expliquer un de mes besoins, je souhaite synchroniser ma bibliographie (documents + notes), stockée dans zotero (une extension de firefox pour gérer une biblio). Comme zotero offre désormais une solution de synchronisation, je devrais m'en sortir... sauf que cela ne marche pas non plus [version beta] :( Plus généralement, j'ai besoin de plusieurs scripts pour copier et synchroniser des fichiers (exporter de bases de données etc.) entre postes en passant par une clé USB, et aussi vers un serveur de fichiers. Du coup ton script m'intéresse ;)

Enfin, pour partager un dossier entre ordis, tu peux jeter un oeil à dropbox... mais je ne sais pas ce que ça vaut en terme de sécurité etc.

@+
Messages postés
3
Date d'inscription
mercredi 6 mai 2009
Statut
Membre
Dernière intervention
17 mai 2009

salut wkenw,

Merci pour ta réponse rapide et désolé de revenir seulement maintenant. J'avais besoin d'un moyen de synchroniser des documents pdf en particulier (pour une base bibliographique), et j'ai une autre solution pour l'instant (qui passe par un serveur distant).
Je vais tester ton script sur d'autres fichiers et te raconterai mes éventuels déboires, et il y en aura certainement vu que je commence seulement python.

Bon week-end
Messages postés
19
Date d'inscription
mardi 30 septembre 2008
Statut
Membre
Dernière intervention
3 août 2009

Salut,

pour exécuter le script à partir du shell, je te propose la méthode la méthode suivante :
- tu ouvres le fichier sync.py, tu l'exécutes (F5).
- dans la console tu as l'aide du programme (suivi d'un message d'erreur que je n'avais pas prévu ^^) parce qu'aucun argument n'a été précisé.
- dans la console, tu exécutes la commande :
main('-f C:/test -d ["E:/"] -r'.split(' ')) (à adapter)
Le split() est nécessaire car le prgm est prévu pour être appelé en ligne de commande windows ou linux, du genre : python sync.py argument1 argument2 etc.
(La fonction main -de sync.py- est chargée dans l'environnement du shell lorsque tu exécutes le script)

Est-ce adapté à ton projet ?
Je dirais que ça dépend de ce que tu veux faire et peux faire :
- en fait il ne s'agit pas exactement d'une synchronisation. Il y a un dossier "maître", celui que tu utilises couramment, et un dossier "esclave", qui conserve les fichiers qui sont passés par le dossier maître. C'est pour cette raison qu'un fichier supprimé dans le dossier maître ne le sera pas dans le dossier esclave. L'esclave est donc tjrs plus gros que le maître.
- je ne sais pas dans quelle mesure tu peux appliquer le prgm à ton cas. Je l'avais plutôt prévu pour un ordi ayant 2 disques durs ou plus. Cela fonctionnera si par un moyen qq tu arrives à partager le dossier à copier avec l'ordinateur de destination. Si tu y arrives, dis-moi comment ! :)

ça répond ?
A bientôt
Messages postés
3
Date d'inscription
mercredi 6 mai 2009
Statut
Membre
Dernière intervention
17 mai 2009

Bonjour,
Je débute tout juste dans Python, et je n'arrive pas à exécuter ton script... Je voulais le lancer sans utiliser les fichiers .conf car je les crois inadaptés dans mon cas. Je souhaite en effet réaliser une synchronisation entre 2 postes dont un en Linux et l'autre en Win XP (et je pensais plutôt utiliser rsync pour le côté Linux...)
Est-ce que ta solution pourrait fonctionner ? si oui, comment je lance ton script, à partir du shell python ?

Merci et désolé pour ces questions au ras des pâquerettes...
Afficher les 6 commentaires

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.