rsync: cómo excluir el directorio superior

rsync: cómo excluir el directorio superior

Entonces, tengo un problema aparentemente simple, pero hasta ahora no he encontrado una solución: quiero excluir el directorio superior de un rsync, mientras sigo sincronizando todos sus hijos. El problema particular es que no tengo permiso para modificar los horarios del directorio superior, pero quiero que todos los elementos secundarios tengan horarios sincronizados correctamente.

El comando rsync que estoy usando es el siguiente:

rsync --exclude ./ -rlptDu ./ server.example.com:/usr/local/directory/

y server.example.com:/usr/local/directory/se ve así:

drwxrws---  5 root   staff 24576 Jul  9 15:00 .

(mi usuario local es miembro de staff)

Cuando ejecuto rsync, aparece el siguiente error:

rsync: failed to set times on "/usr/local/directory/.": Operation not permitted (1)
rsync error: some files/attrs were not transferred (see previous errors) (code 23) at main.c(1070) [sender=3.0.9]
make: *** [pub_to_mel_internal] Error 23

Esta es la versión 3.0.9 en la máquina local y 3.0.7 en la remota, ambas máquinas ejecutan Debian.

Respuesta1

Creo que las reglas de filtrado de rsync no pueden coincidir con el directorio de nivel superior, por lo que siempre está sincronizado. Una solución alternativa es sincronizar todos los archivos dentro de este directorio en lugar del directorio en sí.

rsync -rlptDu -- * server.example.com:/usr/local/directory/

Agregue .[!.]*después *si tiene archivos de puntos en el directorio superior y ..?*si tiene nombres de archivos que comienzan con dos puntos.

Respuesta2

Parece que rsync puede excluir el directorio superior usando --files-from:

$ rsync -anv from/ to/
sending incremental file list
./
a
b.test

sent 97 bytes  received 25 bytes  244.00 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)
$ printf '%s\n' 'a' 'b.test' | rsync -anv --files-from=- from/ to/
building file list ... done
a
b.test

sent 88 bytes  received 22 bytes  220.00 bytes/sec
total size is 0  speedup is 0.00 (DRY RUN)

Acabo de encontrarlo, dejando una pista aquí en caso de que ayude a alguien (o a mí en el futuro).

información relacionada