¿Cómo puedo hacer que rsync elimine los archivos que se han eliminado de la carpeta de origen?

126

Recientemente configuré una máquina con Ubuntu Server para alojar servidores de juegos. Instalé un complemento de copia de seguridad para cada servidor de juego que crea copias de seguridad frecuentes de archivos del mundo del juego en una carpeta particular en la máquina. También establecí una tarea cron para copiar automáticamente esas copias de seguridad en mi carpeta de Dropbox cada noche usando rsync con la opción -a .

Después de unos meses, mi cuenta de Dropbox alcanzó su límite de almacenamiento y me di cuenta de que no podría mantener tantas copias de seguridad, así que configuré el complemento de copia de seguridad del servidor de juegos para no retener tantas copias de seguridad, luego esperé unos días para ver si eliminaría las copias de seguridad anteriores, como está programado para hacerlo semanalmente. El complemento de copia de seguridad finalmente hizo su trabajo y eliminó las copias de seguridad anteriores, por lo que esperaba que la tarea rsync cron elimine posteriormente las copias de seguridad anteriores de mi carpeta de Dropbox para que coincidan con la carpeta de origen, pero no lo ha hecho. Entonces tengo un par de preguntas:

  • De manera predeterminada, ¿los archivos rsync solo agregaron a la carpeta de destino? que se agregaron a la carpeta fuente y cambiar archivos que se han cambiado en la carpeta de origen, pero los archivos NO se borran que se eliminaron de la carpeta de origen?

  • Si ese es el caso, ¿cuál es la mejor manera de hacer que rsync haga esto? yo quiere que la carpeta de destino refleje perfectamente la carpeta fuente, y eso significa eliminar cualquier archivo que haya sido eliminado de la fuente carpeta.

Veo algunas opciones enumeradas en la página del manual para rsync que podrían ser el truco, pero no estoy familiarizado con ellas.

    
pregunta user254251 03.06.2014 - 05:53

3 respuestas

144

Para eliminar archivos en el destino, agregue la opción --delete a su comando. Por ejemplo:

rsync -avh source/ dest/ --delete
    
respondido por el GarethD 26.08.2015 - 09:14
32

El comando rsync no eliminará ningún archivo mientras usa algunas de sus opciones delete en ese comando. Por lo tanto, si se agrega cualquier archivo o carpeta en la fuente, se sincronizará con el destino sin ninguna eliminación.

Le sugiero que use rsync para realizar copias de seguridad desde archivos de origen y use find ... rm para eliminar archivos durante un período de tiempo o tamaño de archivos:

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

El bloque de código anterior, realiza una copia de seguridad desde el origen y luego elimina todos los archivos cuya última hora de modificación tiene más de 2 meses.

ACTUALIZAR

Como veo que las opciones de delete son solo para TARGET, si algunos archivos se eliminan de la fuente, rsync --delete los elimina de TARGET. Y la opción delete por after y before , como se menciona en su página man:

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

Significa eso:

  1. rsync elimina el archivo de TARGET que se eliminó de SOURCE.
  2. rsync comienza a sincronizar archivos.

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

Significa eso:

  1. rsync comienza a sincronizar archivos.
  2. rsync elimina el archivo de TARGET que se elimina de SOURCE después de la sincronización.

NOTA : el --delete-{before/after} implementa solo en TARGET.

    
respondido por el shgnInc 03.06.2014 - 06:13
5

Este comando copiará el incremento de datos y lo mantendrá sincronizado con el servidor remoto.

  1. Copiará solo datos incrementales.
  2. Se eliminará si se borraron datos de la fuente.
  3. Volverá a copiar desde el origen si se borraron datos en el destino.
  4. básicamente este comando mantendrá ambos entornos sincronizados.

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

Ejemplo:

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
    
respondido por el Ganesh Ghube 29.07.2015 - 14:12

Lea otras preguntas en las etiquetas