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).