He leído estos hilos:
- rsync --delete --files-from = list / dest / no elimina archivos no deseados
- ¿Eliminar archivos extraños del directorio de destino a través de rsync?
Pero, por lo que puedo decir (tal vez me estoy perdiendo algo), no cubren la siguiente pregunta:
¿Cómo solicita rsync
copiar archivos y eliminar aquellos en el lado receptor que no existen en el lado emisor, con excepciones? (por ejemplo, no elimine un repositorio mercurial .hg
en el lado receptor, incluso si no hay un repositorio en el lado emisor).
¿Una posibilidad?
Tomando prestado de la respuesta de @Richard Holloway a continuación. Digamos que tengo la siguiente línea:
rsync -av --exclude=dont_delete_me --delete /sending/path /receiving/path
Por lo que yo entiendo, esta línea haría rsync
eliminar todo en la ruta de recepción que no existe en la ruta de envío, excepto aquellas cosas que coinciden dont_delete_me
. Mi pregunta ahora es: ¿rsync mantendría los archivos en el lado receptor que coinciden dont_delete_me
incluso si nada en el lado emisor coincide dont_delete_me
?
rsync -av --exclude=dont_delete_me --delete /sending/path /receiving/path
¿norsync
eliminaría todo en la ruta de recepción que no existe en la ruta de envío, excepto las cosas que coincidendont_delete_me
? Lo más importante, ¿rsync
mantendría las cosas en el lado receptor igualadasdont_delete_me
incluso si nada en el lado emisor coincidedont_delete_me
? Si ese es el caso, creo que esa es la única línea que necesito, ¿verdad?--delete
, a menos que especifique explícitamente--delete-excluded
. Consulte la descripción de--delete
y--delete-excluded
en el manual de rsync.Descubrí que la siguiente solución funciona para mis propósitos:
(Nota: ¡Agregue la
-n
opción de hacer una ejecución en seco y no cambie--delete
a--delete-excluded
!)La ejecución del comando provoca las siguientes propiedades:
src
directorio fuente permanece sin modificaciones.La
dest
carpeta de destino coincide con la carpeta de origen, excepto que:do_not_send_to_dest
lista no se envían al destino ydo_not_modify_in_dest
lista no se modifican en el destino.do_not_
" archivos).Explicación
Supongo que cuando rsync lee los argumentos de la línea de comandos de izquierda a derecha, el
--delete
argumento parece hacer que rsync "cambie de modo" internamente (en cierto sentido), permitiendo el segundo uso de la--exclude-from
opción nuevamente pero con un significado diferente.Advertencia:
Si
do_not_send_to_dest
ya existe un elemento en la lista en el destino, entonces:--delete
a--delete-excluded
, eliminará todo el destino que figura en cualquiera de sus dos listas. xD (¿Quizás rsync fue escrito para ser abierto / flexible, pero tiene algunos con matices?)Ligeramente probado en uso.
Estoy usando "
rsync version 3.0.9 protocol version 30
".fuente