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

124

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 de fichiers de 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 en utilisant 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 pourrais pas conserver autant de sauvegardes, donc j'ai configuré le plug-in de sauvegarde pour ne pas conserver autant de sauvegardes, puis j'ai attendu quelques jours pour voir s'il supprime les sauvegardes les plus anciennes, comme il est prévu d'effectuer chaque semaine. Le plug-in de sauvegarde a finalement fait son travail et a supprimé les anciennes sauvegardes. Je m'attendais donc à ce que la tâche rsync cron supprime les anciennes sauvegardes de mon dossier Dropbox pour correspondre au dossier source, mais cela n'a pas été fait. J'ai donc quelques questions à poser:

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

  • Si tel est le cas, quelle est la meilleure façon de faire rsync le faire? je voulez que le dossier de destination reflète parfaitement le dossier source, et cela signifie supprimer tous les fichiers supprimés de la source dossier.

Je vois quelques options listées dans la page de manuel pour rsync qui pourrait faire l'affaire, mais je ne suis pas familier avec.

    
posée user254251 03.06.2014 - 05:53
la source

3 réponses

141

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

rsync -avh source/ dest/ --delete
    
réponse donnée GarethD 26.08.2015 - 09:14
la source
32

La commande rsync ne supprime aucun fichier lorsque vous utilisez certaines de ses options delete dans cette commande. Donc, si un fichier ou un dossier est ajouté dans la source, il sera synchronisé avec la cible sans aucune suppression.

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

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

Le bloc de code ci-dessus, effectuez une sauvegarde à partir de la source, puis supprimez tous les fichiers dont l'heure de dernière modification est supérieure à 2 mois.

MISE À JOUR

Comme je trouve que les options delete sont uniquement pour TARGET, si certains fichiers sont supprimés de la source, rsync --delete les supprime de TARGET. Et l'option delete par after et before , comme mentionné dans sa page de manuel:

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

Signifie que:

  1. rsync supprime le fichier de TARGET qui est supprimé 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.

REMARQUE : l'implémentation de --delete-{before/after} dans TARGET.

    
réponse donnée shgnInc 03.06.2014 - 06:13
la source
5

Cette commande copiera les données d’incrémentation et les synchronisera avec le serveur distant.

  1. Il ne copiera que les données incrémentielles.
  2. Il supprimera toutes les données supprimées de la source.
  3. Il copiera à nouveau depuis la source si des données sont supprimées à destination.
  4. En gros, cette commande va synchroniser les deux environnements.

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 root@192.168.254.254:/backup
rsync -avW --delete-before -e ssh /data root@192.168.254.254:/backup
    
réponse donnée Ganesh Ghube 29.07.2015 - 14:12
la source

Lire d'autres questions sur les étiquettes