¿Cuáles son las diferencias entre las opciones de eliminación de rsync?

119

Veo en la página de manual de rsync que hay varias deleteopciones, pero realmente no entiendo las diferencias entre ellas. ¿Cuáles son las diferencias entre estas opciones?

 --del                   an alias for --delete-during
 --delete                delete extraneous files from dest dirs
 --delete-before         receiver deletes before transfer (default)
 --delete-during         receiver deletes during xfer, not before
 --delete-delay          find deletions during, delete after
 --delete-after          receiver deletes after transfer, not before
 --delete-excluded       also delete excluded files from dest dirs
Drilldrick
fuente
2
¿Por qué --delete-beforese describe como (default)? No puedo entender lo que (default)significa.
Marco Marsala
1
Ya no se especifica como predeterminado en la manpágina para rsync version 3.1.2 protocol version 31. Sin embargo, mi suposición sobre la versión con el texto citado es que si solo usa en --deletelugar de --delete-WHEN, entonces es como si especificara --delete-WHENdónde está WHENpredeterminado before.
Tom Hale

Respuestas:

115
  • --del/--delete_during: Elimina archivos del directorio de destino a medida que se copian (ahorra memoria en comparación con --delete-before: --delete-beforerealiza un escaneo por separado para buscar eliminables)

  • --delete: Elimina archivos en el directorio de destino si no existen en el directorio de origen.

  • --delete-before: Elimine archivos en el directorio de destino antes de copiar el archivo con el mismo nombre del directorio de origen

  • --delete-during: Eliminar archivos en el directorio de destino MIENTRAS copiando el archivo con el mismo nombre del directorio de origen

  • --delete-delay: Mark elimina durante la transferencia, pero espere hasta que se complete la transferencia

  • --delete-after: El receptor elimina después de la transferencia, no antes ... Si alguna otra parte de rsync movió archivos adicionales a otra parte, querrá esto en lugar de --delete-delay, porque --delete-delaydecide lo que va a eliminar en el medio de la transferencia, mientras que --delete-afterbusca archivos en el directorio eso debe eliminarse DESPUÉS de que todo haya terminado.

  • --delete-excluded: Elimina archivos del directorio de destino que se excluyen explícitamente de la transferencia desde el directorio de origen.

El punto de rsync no es copiar, es archivar. Esta es una distinción importante. El procesamiento de archivos borrados / modificados es crítico y en muchos casos matizado.

La --deletebandera en particular es una que he visto arruinada muchas veces. Mucha gente usa rsync para mover archivos a un almacenamiento de baja prioridad, y en este caso desea que los archivos que está moviendo aún EXISTAN en el directorio de destino. Eso no es lo que hace eliminar: --deleteasegúrese de que, cuando elimine un archivo del directorio de origen, TAMBIÉN se elimine de su directorio de destino, para que su destino no se llene de basura ... Una vez que vio a un chico borrar su copia de seguridad poniendo una nueva unidad y no apagando su script rsync nocturno. El script vio que el directorio de origen ahora estaba vacío, y eliminó todos los archivos en el directorio de destino, por lo que coincidirían.

La mayoría de las otras opciones están relacionadas con el espacio o el rendimiento. Cuando elimine los archivos es importante si desea asegurarse de que la transferencia se realice correctamente antes de hacer nada, pero si su dispositivo es demasiado pequeño para manejar 2 copias de toda la información, debe eliminarla a medida que avanza, etc. poco loco debido a su larga historia en múltiples plataformas: se han agregado algunas opciones para que las personas que están acostumbradas a cierto comportamiento no se confundan.

Satanicpuppy
fuente
3
Entonces, ¿es --delete y --delete-before lo mismo? man rsync no dice cuándo --delete elimina archivos.
ppr
@ppr: depende del sistema. La razón por la que tiene tantas opciones específicas es porque eliminar en Solaris! = Eliminar en HP-UX! = Eliminar en AIX! = Eliminar en Linux.
Satanicpuppy
Al sincronizar un directorio completo, ¿se delete-afterelimina cada archivo entre la sincronización o solo después de que se haya reflejado todo el directorio? Pensé que delete-afterera suficiente para mis necesidades, pero no me queda espacio en el dispositivo cuando hago una copia de seguridad de una de mis unidades.
Sridhar Sarnobat
1
@ Sridhar-Sarnobat: Cualquiera de los dos. Mueve todo lo que va a mover, y cuando termina, comienza a eliminar cosas. Si desea que se elimine antes de que se mueva todo, use --delete-during
Satanicpuppy
2
Después de un poco de experiencia, descubro que incluso delete-duringno siempre previene no space left on device(en Linux). Por delete-beforelo tanto, es la única forma garantizada de evitarlo (como cuando se refleja una unidad que está casi llena, y la unidad de destino también está casi llena).
Sridhar Sarnobat
1

Hay dos cosas que suceden:

  1. ¿Quién elimina?
  2. Cuando sucede

Se puede indicar al remitente o al receptor que elimine (no estoy seguro de por qué esto es importante). Entonces, cuando rsync desde una computadora se conecta al servidor rsync en el otro lado, esto determina quién está emitiendo efectivamente el comando eliminar.

Cuando sucede es bastante fácil ... antes significa que todos los archivos se eliminan, y ENTONCES rsync copia sobre los archivos. durante los medios a medida que avanza por la lista de archivos, los elimina cuando se trata de ellos, y luego significa que espera hasta que se transfieran todos los archivos y luego elimina el lado remoto. Esto solo importa cuando la transferencia se interrumpe.

Michael Pryor
fuente
Estoy bastante seguro de que ninguna de estas opciones está relacionada con la eliminación de elementos del remitente . Todos ellos (AFAIK) se relacionan con eliminar cosas del lado del receptor . Además, usted dice: "antes significa que todos los archivos se eliminan, y LUEGO rsync copia sobre los archivos" - ¿es esto correcto? Esperaría --delete-beforeeliminar solo aquellos archivos que debían desaparecer, ¡no todos los archivos! Pero supongo que es posible que rsync elimine todo y luego transfiera los datos "nuevos" (posiblemente sin cambios) ...
Quuxplusone
1
Ah, "borrar desde el lado del emisor" se apoya en rsync, pero el nombre de esa opción es --remove-source-files.
Quuxplusone
1

Otro punto que vale la pena mencionar es que si su directorio de origen termina con /*, entonces rsync solo considerará esos archivos y no el directorio en sí (y, por lo tanto, la ausencia de archivos que desea eliminar en el destino).

Si está especificando una opción de eliminación anterior, pero parece que rsync no se está eliminando, compruebe para asegurarse de que no se está llenando accidentalmente y proporcionando una lista de archivos cuando se refiere al directorio en sí.

Walt Stoneburner
fuente