¿Cómo excluir archivos en rsync?

12

Estoy usando ubuntu server 12.04, ahora quiero hacer una copia de seguridad de algunos archivos usando rsync, aquí hay una prueba:

rsync -aAX $HOME/Documents/* $HOME/Backups/TEST --exclude={$HOME/Documents/another/*,$HOME/Documents/temp/*} 

Como puede ver, quiero hacer una copia de seguridad de todos los archivos en la carpeta $ HOME / Documentos en la carpeta $ HOME / Backups / TEST , pero excluir archivos en la carpeta other y temp . Pero fallé, rsync todavía copió los archivos en ambas carpetas excluidas:

ls $HOME/Backups/TEST/another
test

prueba es un archivo en la carpeta otro , y también se copia aunque excluyo el archivo en rsync, ¿por qué? ¿Cómo dejar que esos archivos se excluyan realmente?

Searene
fuente

Respuestas:

11

Existen varios problemas con su comando rsync (consulte también la página de manual de rsync para obtener una explicación detallada de las reglas de filtro).

  • Necesitamos un --excludecomando para cada patrón dado.
  • las rutas dadas deben ser relativas a la ruta de origen (sin rutas absolutas).
  • Es necesario dar opciones antes de indicar el origen y el destino.

Para su ejemplo, la siguiente sintaxis funcionará:

rsync -avAX --exclude=another/ --exclude=temp/ ~/Documents/ ~/Backups/TEST

Tenga en cuenta que si un patrón de exclusión finaliza con /él, se refiere a un directorio. Si omite ambos, se excluirán los archivos y directorios con ese nombre. Reemplácelo con un comodín *para excluir todos los archivos o directorios con esa cadena en sus nombres.

Takkat
fuente
66
Esto no es del todo correcto. No estoy seguro de cómo funciona, pero por experimentación, --exclude=/fooexcluirá el directorio foodirectamente en la fuente, pero --exclude=fooexcluirá cualquier directorio llamado foo, incluso en subdirectorios.
Sparhawk el
10

Puede resultarle más fácil agregar .rsync-filterarchivos en sus directorios de origen y usar la -Fopción.

Desde la página del manual:

-F: La opción -F es una abreviatura [...] para esta regla:

 --filter='dir-merge /.rsync-filter'

Esto le dice a rsync que busque archivos .rsync-filter por directorio que hayan sido rociados a través de la jerarquía y use sus reglas para filtrar los archivos en la transferencia.

Por ejemplo: en $ HOME / Documentos / .rsync-filter

# you can add comments in filter files

- /another/
- /temp/

En lugar de -, también puedes escribir la palabra completa exclude.

Ahora usted puede

rsync -aAX -F $HOME/Documents/ $HOME/Backups/TEST/
mivk
fuente