web-dev-qa-db-fra.com

Comment faire en sorte que rsync supprime les fichiers supprimés du dossier source?

J'ai récemment installé une machine avec Ubuntu Server pour héberger des serveurs de jeux. J'ai installé un plug-in de sauvegarde pour chaque serveur de jeu, qui crée des sauvegardes fréquentes des fichiers du monde du jeu dans un dossier particulier de la machine. J'ai également établi une tâche cron pour copier automatiquement ces sauvegardes dans mon dossier Dropbox chaque nuit à l'aide de rsync avec l'option -a.

Après quelques mois, mon compte Dropbox a atteint sa limite de stockage et je me suis rendu compte que je ne serais pas en mesure de conserver autant de sauvegardes. J'ai donc configuré le plug-in de sauvegarde du serveur de jeu pour ne pas conserver autant de sauvegardes, puis j'ai attendu quelques jours pour voir s'il le ferait. supprimez les anciennes sauvegardes comme il est prévu de le faire toutes les semaines. Le plug-in de sauvegarde finissant par faire son travail et supprimant les anciennes sauvegardes, je m'attendais donc à ce que la tâche périodique rsync supprime ultérieurement les anciennes sauvegardes de mon dossier Dropbox pour les faire correspondre au dossier source, mais ce n'est pas le cas. J'ai donc quelques questions:

  • Par défaut, rsync uniquement ajoute-t-il des fichiers au dossier de destination qui ont été ajoutés au dossier source et changer les fichiers qui ont été modifiés dans le dossier source mais () NOT delete fichiers supprimés du dossier source?

  • Si tel est le cas, quelle est la meilleure façon de faire ceci avec rsync? Je souhaite que le dossier de destination reflète parfaitement le dossier source, ce qui signifie la suppression de tous les fichiers supprimés du dossier source.

Je vois certaines options répertoriées dans la page de manuel de rsync qui pourraient faire l'affaire, mais je ne les connais pas bien.

174
user254251

Pour supprimer des fichiers de la cible, ajoutez l’option --delete à votre commande. Par exemple:

rsync -avh source/ dest/ --delete
201
GarethD

La commande rsync ne supprimera aucun fichier si vous utilisez certaines de ses options deletedans cette commande. Ainsi, si un fichier ou un dossier est ajouté à la source, il sera synchronisé avec la cible sans aucune suppression.

Je vous suggère d'utiliser rsyncpour effectuer une sauvegarde à partir de fichiers source et d'utiliser find ... rm pour les fichiers de suppression par période ou par taille:

rsync [options] SOURCE TARGET
find TARGET -maxdepth 1 -type f -mtime +60 -exec rm -f {} \;

Le code ci-dessus, effectuez une sauvegarde à partir de la source, puis supprimez tous les fichiers dont la dernière modification a duré plus de 2 mois.

UPDATE

Comme je trouve que les options deletesont uniquement destinées à TARGET que si certains fichiers sont supprimés de la source, rsync --delete les supprime de TARGET. Et l'option deletede afteret beforename__, comme indiqué dans sa page de manuel:

--delete-before         receiver deletes before transfer, not during

Signifie que:

  1. rsync supprime les fichiers de TARGET qui sont supprimés de SOURCE.
  2. rsync lance la synchronisation des fichiers.

--delete-after receiver deletes after transfer, not during

Signifie que:

  1. rsync lance la synchronisation des fichiers.
  2. rsync supprime le fichier de TARGET qui est supprimé de SOURCE après la synchronisation.

NOTE: le --delete-{before/after} est implémenté uniquement dans TARGET.

43
shgnInc

Cette commande copie les données d’incrémentation et les maintient synchronisées avec le serveur distant.

  1. Il ne copie que les données incrémentielles.
  2. Il supprimera toutes les données supprimées de la source.
  3. Il copiera à nouveau à partir de la source si des données sont supprimées à la destination.
  4. en gros, cette commande maintiendra l’environnement synchronisé.

rsync -avWe ssh --delete-before (source) root@localhost:(destination) rsync -avW --delete-before -e ssh (source) root@localhost:(destination)

Exemple:

rsync -avWe ssh --delete-before /data [email protected]:/backup
rsync -avW --delete-before -e ssh /data [email protected]:/backup
5
Ganesh Ghube