Solución:
-
--del/--delete_during
: Elimina archivos del directorio de destino a medida que se copian (ahorra memoria en comparación con--delete-before
:--delete-before
hace un escaneo por separado para buscar borrables) -
--delete
: Elimina archivos en el directorio de destino si no existen en el directorio de origen. -
--delete-before
: Elimine los archivos en el directorio de destino antes de copiar el archivo con el mismo nombre del directorio de origen -
--delete-during
: Elimina archivos en el directorio de destino MIENTRAS copia el archivo con el mismo nombre del directorio de origen -
--delete-delay
: Mark elimina durante la transferencia, pero espera hasta que se complete la transferencia -
--delete-after
: Receiver elimina después de la transferencia, no antes … Si alguna otra parte de rsync movió archivos adicionales a otro lugar, querría esto en lugar de--delete-delay
, porque--delete-delay
decide qué se eliminará en medio de la transferencia, mientras que--delete-after
comprueba el directorio en busca de archivos que deban eliminarse DESPUÉS de que todo haya terminado. -
--delete-excluded
: Elimina archivos del directorio de destino que están explícitamente excluidos de la transferencia desde el directorio de origen.
El objetivo de rsync no es copiar, es archivar. Esta es una distinción importante. El procesamiento de archivos eliminados / modificados es fundamental y, en muchos casos, matizado.
los --delete
La bandera 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 EXISTEN en el directorio de destino. Eso no es lo que hace eliminar: --delete
se asegura 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 vio a un tipo borrar su copia de seguridad colocando una nueva unidad y no apagar su script rsync nocturno. Script vio que el directorio de origen ahora estaba vacío y eliminó todos los archivos del directorio de destino, para que coincidieran.
La mayoría de las otras opciones están relacionadas con el espacio o el rendimiento. Cuando elimina los archivos es importante si desea asegurarse de que la transferencia sea exitosa antes de hacer cualquier cosa, pero si su dispositivo es demasiado pequeño para manejar 2 copias de toda la información, debe eliminar sobre la marcha, etc. un poco loco debido a su larga historia en múltiples plataformas: se han agregado algunas opciones para que las personas que estaban acostumbradas a cierto comportamiento no se confundan.
Por defecto rsync
no elimina ningún archivo en el lado de destino. Para hacer rsync
eliminar archivos en absoluto, debe utilizar al menos una de las opciones de eliminación.
Si no le importa cuándo se eliminan los archivos, simplemente use --delete
y deja la elección a rsync
. Puedes combinar --delete
con otras opciones de eliminación (esto no entra en conflicto) pero no es necesario, ya que todas las demás opciones de eliminación ya implican --delete
.
--delete-before
funciona de la siguiente manera: rsync
busca qué archivos están presentes en el origen y qué archivos están presentes en el destino, elimina todos los archivos encontrados en el destino pero no en el origen y luego inicia la sincronización real. Este orden es útil si el destino tiene poco espacio de almacenamiento, ya que primero liberará más espacio en el disco en el destino antes de comenzar a transferir archivos nuevos. 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 de la siguiente manera: rsync
Inmediatamente comienza a sincronizar archivos y cuando se encuentra con un archivo que existe solo en el destino, se elimina. De esa manera, no hay penalización de velocidad y tampoco se requiere memoria adicional. La desventaja es que puede suceder que primero se copien muchos archivos nuevos en los destinos antes de que se eliminen los archivos eliminados, por lo que el destino puede requerir mucho más espacio de almacenamiento en disco durante la operación de lo que requiere al final una vez que se completa la operación. hecho.
--delete-after
funciona de la siguiente manera: Primero sincronice todos los archivos, luego realice la misma operación que --delete-before
realiza antes de la fase de sincronización. Ésta es la peor opción en la mayoría de los casos comunes, ya que requiere la mayor parte de la memoria, la mayor parte del espacio en disco en el destino y es más lento, ya que es 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 esté utilizando “fusionar archivos“(qué son los archivos combinados y cómo funcionan está más allá del alcance de esta respuesta). Dado que estos archivos pueden contener reglas para que los archivos se excluyan durante la eliminación, los nuevos archivos combinados deben copiarse antes de la fase de eliminación si su contenido se debe considerar durante la fase de eliminación. 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 el predeterminado en macOS 10.15, por ejemplo). Funciona como --delete-during
, excepto que no eliminará los archivos inmediatamente, sino después de que se realice la sincronización, por lo que es un híbrido de --delete-during
y --delete-after
. Las ventajas son que es más rápido que --delete-after
y aún admite la combinación de archivos correctamente, la desventaja es que requiere más memoria y espacio en disco durante la sincronización, al igual que --delete-after
.
--delete-excluded
dice rsync
no solo para eliminar los archivos que faltan en el origen, sino también para eliminar los archivos en el destino que se excluyeron de la sincronización (--exclude
o --exclude-from
), independientemente de si estos archivos existirían realmente en la fuente o no.
Están sucediendo dos cosas:
- ¿Quién hace la eliminación?
- Cuando sucede
Se puede indicar al remitente o al destinatario que borre (no estoy seguro de por qué es importante). Entonces, cuando rsync de una computadora se conecta al servidor rsync en el otro lado, esto determina quién está emitiendo efectivamente el comando de eliminación.
Cuando sucede es bastante fácil … antes significa que todos los archivos se eliminan y ENTONCES rsync copia los archivos. durante significa que, a medida que recorre la lista de archivos, los elimina cuando se trata de ellos, y después significa que espera hasta que todos los archivos se transfieran y luego elimina el lado remoto. Esto solo importa cuando se interrumpe la transferencia.