J'ai lu ces fils:
Mais, pour autant que je sache (peut-être que je manque quelque chose), ils ne couvrent pas la question suivante:
Comment demandez-vous à rsync
de copier des fichiers et de supprimer ceux du côté de réception qui n'existent pas du côté de l'envoi, à quelques exceptions près? (par exemple, ne supprimez pas un référentiel Mercurial .hg
côté réception, même s'il n'y a pas de référentiel côté envoi).
Emprunt de la réponse de @Richard Holloway ci-dessous. Disons que j'ai la ligne suivante:
rsync -av --exclude=dont_delete_me --delete /sending/path /receiving/path
Pour autant que je comprends, cette ligne ferait rsync
supprimer tout sur le chemin de réception qui n'existe pas sur le chemin d'envoi, sauf les choses correspondant à dont_delete_me
. Ma question est maintenant: est-ce que rsync conserverait les fichiers du côté réception qui correspondent à dont_delete_me
même si rien du côté de l'envoi ne correspond à dont_delete_me
?
Si tu utilises --delete
et --exclude
ensemble, ce qui se trouve à l'emplacement exclu ne sera pas supprimé même si les fichiers source sont supprimés.
Mais cela soulève le problème que le dossier ne sera pas du tout rsync
'd. Vous aurez donc besoin d'un autre travail rsync
pour sync
ce dossier.
Par exemple.
rsync -nav /home/richardjh/keepall/ /home/backup/richardjh/keepall/
rsync -nav --exclude=keepall --delete /home/richardjh /home/backup/richardjh
Vous pouvez les exécuter dans l'autre sens, mais cela supprimerait tous les fichiers supprimés, puis les remplacerait, ce qui n'est pas aussi efficace.
Vous ne pouvez pas le faire comme une doublure.
J'ai trouvé que la solution suivante fonctionne pour mes besoins:
rsync -r --exclude-from=do_not_send_to_dest --delete --exclude-from=do_not_modify_in_dest src/ dest
(Remarque: ajoutez le -n
option pour effectuer un essai à sec et ne pas modifier --delete
à --delete-excluded
!)
L'exécution de la commande entraîne les propriétés suivantes:
src
reste inchangéLe dossier de destination dest
correspond au dossier source, sauf que:
do_not_send_to_dest
la liste n'est pas envoyée à la destination, etdo_not_modify_in_dest
la liste n'est pas modifiée dans la destination.do_not_
" des dossiers.)Explication
Je suppose que rsync lit les arguments de la ligne de commande de gauche à droite, le --delete
L'argument semble entraîner rsync à "changer de mode" en interne (dans un sens), permettant la deuxième utilisation de --exclude-from
encore une fois mais avec une signification différente.
Caveat:
Si un élément du do_not_send_to_dest
la liste existe déjà dans la destination, puis:
--delete
à --delete-excluded
supprimera tout ce qui se trouve dans la destination qui figure dans l'une de vos deux listes. xD (Peut-être que rsync a été écrit pour être ouvert/flexible, mais en a-t-il avec des nuances?)Légèrement testé.
J'utilise "rsync version 3.0.9 protocol version 30
".