rsync no puede eliminar el directorio no vacío

10

Al sincronizar mi copia de seguridad remota, aparece el error rsync cannot delete non-empty directory.

Sé la causa: he excluido algunos archivos y cuando rsync intenta eliminar un directorio remoto porque no existe localmente, no puede porque no está vacío. Sin la exclusión, el directorio se vaciaría.

También sé que podría deshacerme del problema usando --delete-excluded, pero eso no es lo que quiero.

Me gustaría omitir la carga de ciertos archivos (porque son demasiado grandes para mi velocidad de carga), pero quiero mantener aquellos que ya he subido hace algún tiempo si existen localmente . Si no existen localmente, deberían eliminarse. --delete-excluded los eliminaría a todos en el lado remoto.

Eso también significa que si un directorio ya no existe localmente, debería eliminarse incluso si contiene archivos excluidos.

¿Es posible configurar rsync para lograr esto?

marlar
fuente

Respuestas:

5

Usa el pmodificador:

Una p indica que una regla es perecedera, lo que significa que se ignora en los directorios que se eliminan. Por ejemplo, las reglas predeterminadas de la opción -C que excluyen cosas como "CVS" y "* .o" están marcadas como perecederas y no evitarán que un directorio que se eliminó en el origen se elimine en el destino.

Por ejemplo, uso la -Fopción, que "le dice a rsync que busque archivos .rsync-filter por directorio que han sido rociados a través de la jerarquía y use sus reglas para filtrar los archivos en la transferencia".

Mi .rsync-filtercontiene líneas como estas para filtrar estos "excrementos" que las Mac dejan atrás:

-p .DS_Store
-p ._*

Si usa en excludelugar de solo -, agregue una coma. Por ejemplo :

exclude,p .DS_Store
exclude,p Thumbs.db
mivk
fuente
0

Puede usar modificadores de patrón de inclusión / exclusión, complementos en el patrón que utilizó. Le dice a rsync que excluye la regla solo para el lado del envío.

-n: solo verifique lo que se eliminará en desc, no elimine el patrón: * .sh desc: / home / kg / tmp

objetivo: desea eliminar el final del archivo .sh en desc, pero si hace esto, no puede eliminar en el desc: rsync -rvz --exclude * .sh --delete -n conkg [email protected]: / inicio / kg / tmp

debe cambiar a: agregue -n cuando pruebe la prueba: rsync -rvz --exclude-from del.txt -n --delete conkg [email protected]: / home / kg / tmp real delete: rsync -rvz - excluir-del.txt --delete conkg [email protected]: / home / kg / tmp cat del.txt -s * .sh

o: rsync -rvz --exclude -s * .sh --delete conkg [email protected]: / home / kg / tmp

kg deng
fuente
-2

solo use las opciones '--max-size = xx' y '--delete' de rsync. Hará todo automáticamente y cumplirá con todos sus requisitos.

chispa
fuente
A lo sumo sería una solución alternativa. Quiero omitir completamente los archivos mov, avi y cr2 porque generalmente son muy grandes. Pero los que ya he subido en una línea más rápida hace algún tiempo deben mantenerse. Ahora el problema es que los archivos JPG más grandes son más grandes que los archivos CR2 más pequeños, por lo que esta solución no es ideal. Prefiero usar la función de exclusión para filtrar los nombres de archivo.
marlar