Por defecto, rsync
no borra ningún archivo en el lado de destino. Para hacer que rsync
borre archivos en absoluto, necesita usar al menos una de las opciones de borrado.
Si no le importa cuándo se borran los archivos, sólo tiene que utilizar --delete
y dejar la elección a rsync
. Puede combinar --delete
con otras opciones de borrado (esto no entra en conflicto) pero no es necesario ya que todas las demás opciones de borrado ya implican --delete
.
--delete-before
funciona de la siguiente manera: rsync
mira qué archivos están presentes en el origen y qué archivos están presentes en el destino, borra todos los archivos encontrados en el destino pero no en el origen y luego comienza la sincronización real. Esta orden es útil si el destino tiene poco espacio de almacenamiento, ya que primero liberará más espacio de disco en el destino antes de empezar a transferir cualquier archivo nuevo. La desventaja es que rsync
requerirá más memoria para realizar la operación y toda la operación es un proceso de dos pasos y por lo tanto más lento.
--delete-during
funciona como sigue: rsync
comienza inmediatamente a sincronizar los archivos y cuando se encuentra con un archivo que sólo existe en el destino, lo elimina. De esta manera no hay penalización de velocidad y tampoco se requiere memoria adicional. El inconveniente es que puede ocurrir que primero se copien muchos archivos nuevos en los destinos antes de que se borren los archivos eliminados, por lo que el destino puede requerir mucho más espacio de almacenamiento en disco durante la operación que el que requiere al final una vez que se ha realizado toda la operación.
--delete-after
funciona como sigue: Primero sincroniza todos los archivos, y luego realiza la misma operación que --delete-before
realiza antes de la fase de sincronización. Esta es la peor opción en la mayoría de los casos, ya que requiere la mayor cantidad de memoria, la mayor cantidad de espacio en disco en el destino, y es más lenta al ser un proceso de dos pasos; básicamente combina todas las desventajas de los otros dos métodos. Esta opción existe principalmente para el caso de que se utilicen “archivos de fusión” (lo que son los archivos de fusión y cómo funcionan está fuera del alcance de esta respuesta). Dado que estos archivos pueden contener reglas para los archivos que deben excluirse durante el borrado, los nuevos archivos de fusión deben copiarse antes de la fase de borrado si su contenido debe considerarse durante la fase de borrado. A menos que sea un requisito, --delete-after
no tiene ninguna ventaja.
--delete-delay
es una opción bastante nueva (no está disponible en rsync
2.6.9, que sigue siendo la predeterminada en macOS 10.15, por ejemplo). Funciona como --delete-during
, salvo que no borra los archivos inmediatamente sino después de la sincronización, por lo que es un híbrido de --delete-during
y --delete-after
. La ventaja es que es más rápido que --delete-after
, la desventaja es que requiere más memoria durante la sincronización.
--delete-excluded
le dice a rsync
que no sólo borre los archivos que faltan en el origen, sino que también borre los archivos en el destino que fueron excluidos de la sincronización (--exclude
o --exclude-from
), independientemente de que estos archivos existan realmente en el origen o no.