J'ai lu ces fils:
- rsync --delete --files-from = list / dest / ne supprime pas les fichiers indésirables
- Supprimer les fichiers superflus du répertoire dest via rsync?
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é 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).
Une possibilité?
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, à l'exception de ce qui correspond dont_delete_me
. Ma question est maintenant: est-ce que rsync conserverait les fichiers du côté de réception qui correspondent dont_delete_me
même si rien du côté d'envoi ne correspond dont_delete_me
?
rsync -av --exclude=dont_delete_me --delete /sending/path /receiving/path
cela ne ferait-il pasrsync
supprimer tout sur le chemin de réception qui n'existe pas sur le chemin d'envoi, à l'exception des choses correspondant àdont_delete_me
? Plus important encore, est-cersync
que les choses resteraient égales du côté de la réceptiondont_delete_me
même si rien du côté de l'envoi ne corresponddont_delete_me
? Si c'est le cas, je pense que c'est la seule ligne dont j'ai besoin, non?--delete
, sauf si vous le spécifiez explicitement--delete-excluded
. Voir la description de--delete
et--delete-excluded
dans le manuel rsync.J'ai trouvé que la solution suivante fonctionne pour mes besoins:
(Remarque: Ajoutez l'
-n
option pour effectuer un essai à sec et ne changez pas--delete
en--delete-excluded
!)L'exécution de la commande entraîne les propriétés suivantes:
src
répertoire source reste inchangéLe
dest
dossier de destination correspond au dossier source, sauf que:do_not_send_to_dest
liste ne sont pas envoyés à la destination, etdo_not_modify_in_dest
liste ne sont pas modifiés dans la destination.do_not_
fichiers " ".)Explication
Je suppose que rsync lit les arguments de la ligne de commande de gauche à droite, l'
--delete
argument semble amener rsync à "changer de mode" en interne (dans un sens), permettant à nouveau la deuxième utilisation de l'--exclude-from
option mais avec une signification différente.Caveat:
Si un élément de la
do_not_send_to_dest
liste existe déjà dans la destination, alors:--delete
en--delete-excluded
supprimera tout dans la destination qui est répertoriée dans l'une de vos deux listes. xD (Peut-être que rsync était écrit pour être ouvert / flexible, mais en a-t-il avec des nuances?)Légèrement testé à l'usage.
J'utilise "
rsync version 3.0.9 protocol version 30
".la source