J'ai un dossier a / et un dossier distant A /. Je lance maintenant quelque chose comme ça sur un Makefile:
get-music:
rsync -avzru server:/media/10001/music/ /media/Incoming/music/
put-music:
rsync -avzru /media/Incoming/music/ server:/media/10001/music/
sync-music: get-music put-music
quand je fais de la musique sync, il obtient d'abord tous les diffs du serveur au local, puis l'inverse, en envoyant tous les diffs du local au serveur.
Cela ne fonctionne très bien que s'il n'y a que des mises à jour ou de nouveaux fichiers à venir. S'il y a des suppressions, cela ne fait rien.
Dans rsync, il y a des options --delete et --delete-after pour aider à accomplir ce que je veux, mais le fait est que cela ne fonctionne pas sur une synchronisation bidirectionnelle.
Si je veux supprimer les fichiers du serveur sur une synchronisation, lorsque les fichiers locaux ont été supprimés, cela fonctionne, mais si, pour une raison quelconque (expliquée après), j'ai des fichiers qui ne sont pas sur le serveur mais qui existent localement et ils ont été supprimés, Je veux les supprimer localement et non le serveur copié (comme cela se produit).
Le fait est que j'ai 3 machines en contexte:
- bureau
- carnet
- serveur domestique
Ainsi, parfois, le serveur aura des fichiers qui ont été supprimés avec une synchronisation de bloc-notes, par exemple, puis, lorsque j'exécute une synchronisation avec mon bureau (où les fichiers de serveur supprimés existent toujours), je veux que ces fichiers soient supprimés et non copié à nouveau sur le serveur.
Je suppose que cela n'est possible qu'avec une base de données et un suivi des opérations: P
Des solutions plus simples? Je vous remercie.
Réponses:
Essayez Unison: http://www.cis.upenn.edu/~bcpierce/unison/
Syntaxe:
unison dirA/ dirB/
Unison demande quoi faire lorsque les fichiers sont différents, mais vous pouvez automatiser le processus en utilisant ce qui suit qui accepte les options par défaut (non conflictuelles):
unison -auto dirA/ dirB/
unison -batch dirA/ dirB/
ne pose aucune question et écrit pour afficher le nombre de fichiers ignorés (car ils sont en conflit).la source
:)
Vous pouvez également essayer bitpocket: https://github.com/sickill/bitpocket
la source
Vous pouvez utiliser Osync: http://www.netpower.fr/osync , qui est basé sur rsync avec une propagation de suppression intelligente. il dispose également de plusieurs options telles que la reprise d'une exécution interrompue, la suppression logicielle et le contrôle du temps.
la source
Étant donné que la question originale implique également un ordinateur de bureau et un ordinateur portable et un exemple impliquant des fichiers musicaux (il utilise probablement une interface graphique), je mentionnerais également l'un des meilleurs programmes bidirectionnels, multi-plateformes, gratuits et open source à ce jour: FreeFileSync .
Il est basé sur une interface graphique, très rapide et intuitive, est livré avec un filtrage et de nombreuses autres options, y compris la possibilité de se connecter à distance, d'afficher et de gérer de manière interactive les «collisions» (par exemple, des fichiers avec des horodatages similaires) et de basculer entre le transfert bidirectionnel, la mise en miroir et bientôt.
la source
Essaye ça,
Je viens de tester cela et cela a fonctionné pour moi. Je fais une synchronisation bidirectionnelle entre Windows7 (en utilisant cygwin avec le package rsync installé) et le serveur de fichiers FreeNAS (FreeNAS fonctionne sur FreeBSD avec le package rsync pré-installé).
la source
-u
ignore les fichiers plus récents sur la destination, mais rsync n'a pas de moyen de suivre l'âge d'une suppression, alors comment ce script pourrait-il différencier le moment où un fichier local est nouveau (et doit être conservé) ou ancien (et doit être supprimé) ? Ou suis-je mal compris?--delete-excluded
Supprime- t-il les fichiers qui existent sur les répertoires de destination mais pas les répertoires source? Je pensais que vous deviez définir,--exclude=<filename>
donc rsync ne supprimera-t-il pas uniquement ces exclusions? Ou est-ce que rsync traite tous les fichiers de répertoire non source comme "exclut"?--delete-excluded
est exécuté avec le serveur comme source en premier: les fichiers ajoutés localement seront supprimés pendant cette exécution (alors que les fichiers ajoutés au serveur sont copiés sur la cible locale). Les seuls fichiers locaux synchronisés avec le serveur sont des fichiers qui existent également sur le serveur et qui ont été modifiés localement (plus récemment que les versions du serveur) - ce qui est peu probable dans le scénario du PO. Comme vous le suggérez, methinks une véritable synchronisation bidirectionnelle ne peut pas être effectuéersync
, car l'enregistrement de l'état entre les exécutions est nécessaire.Vous pouvez essayer csync , c'est le moteur de synchronisation sous le capot d' owncloud .
la source
J'utilise maintenant SparkleShare https://www.sparkleshare.org/
fonctionne sur mac, linux et windows.
la source
Je ne sais pas si cela fonctionne avec deux synchronisations, mais pour que --delete fonctionne, vous devez également ajouter le paramètre --recursive.
la source
--recurse
est-r
que l'OP est utilise (incorporé dans le groupe-options comprimé-avzru
).Vous pouvez utiliser cloudsync pour garder un dossier synchronisé avec une télécommande:
Si la télécommande est NFS, vous pouvez utiliser:
la source
Rclone est ce que vous recherchez. Rclone («rsync for cloud storage») est un programme en ligne de commande pour synchroniser des fichiers et des répertoires vers et depuis différents fournisseurs de stockage cloud, y compris les systèmes de fichiers locaux. Rclone était auparavant connu sous le nom de Swiftsync et est disponible depuis 2013.
la source