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 rsynccopiar archivos y eliminar aquellos en el lado receptor que no existen en el lado emisor, con excepciones? (por ejemplo, no elimine un repositorio mercurial .hgen 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 rsynceliminar 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¿norsynceliminarí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, ¿rsyncmantendría las cosas en el lado receptor igualadasdont_delete_meincluso 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--deletey--delete-excludeden el manual de rsync.Descubrí que la siguiente solución funciona para mis propósitos:
(Nota: ¡Agregue la
-nopción de hacer una ejecución en seco y no cambie--deletea--delete-excluded!)La ejecución del comando provoca las siguientes propiedades:
srcdirectorio fuente permanece sin modificaciones.La
destcarpeta de destino coincide con la carpeta de origen, excepto que:do_not_send_to_destlista no se envían al destino ydo_not_modify_in_destlista 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
--deleteargumento parece hacer que rsync "cambie de modo" internamente (en cierto sentido), permitiendo el segundo uso de la--exclude-fromopción nuevamente pero con un significado diferente.Advertencia:
Si
do_not_send_to_destya existe un elemento en la lista en el destino, entonces:--deletea--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