Estoy usando rsync
para mantener dos discos sincronizados. Utilizo el --archive
que tiene por objeto mantener los permisos. Sin embargo, los archivos que están "bloqueados" en Finder no se muestran como bloqueados después de la rsync
operación se ha completado. ¿Cómo puedo replicar el bloqueo del Finder durante rsync
?
Respuesta
¿Demasiados anuncios?La versión de rsync
que proporciona MacOS tiene unos 15 años de antigüedad y no maneja la preservación de las banderas de archivo soportadas por chflags
(por ejemplo UF_IMMUTABLE
o "Bloqueado" como se establece con chflags uchg
).
Las versiones actuales de rsync tener:
--fileflags Esta opción hace que rsync actualice las banderas de los archivos para que sean las mismas que las de los archivos y directorios de origen (si su sistema operativo soporta la llamada al sistema chflags(2)).
Instalar Homebrew y actualizar rsync
a una versión moderna con:
/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"
brew install rsync
Si está realizando una transferencia remota, tanto el host emisor como el receptor deben soportar --fileflags
obviamente.
Sin embargo, si la versión necesaria de rsync
no está en la versión por defecto del remote-shell (por ejemplo /usr/bin:/bin:/usr/sbin:/sbin
), debe especificarse la ruta de acceso a la versión requerida. Esto se hace con la opción --rsync-path=PROGRAM
opción.
Por ejemplo:
rsync --fileflags -avz ${HOME}/ remotehost:${HOME}
errores cuando el host remoto por defecto rsync
no admite --fileflags
:
rsync: en la máquina remota: --fileflags: opción desconocida
Error de rsync: error de sintaxis o de uso (código 1) en /AppleInternal/BuildRoot/Library/Caches/com.apple.xbs/Sources/rsync/rsync-54.120.1/rsync/main.c(1337) [server=2.6.9]
rsync: conexión cerrada inesperadamente (0 bytes recibidos hasta el momento) [remitente] error rsync: error en el flujo de datos del protocolo rsync (código 12) en io.c(228) [sender=3.2.3]
Suponiendo que el requisito rsync
se instala en /usr/local/bin
, esto se resuelve con:
rsync --rsync-path=/usr/local/bin/rsync --fileflags -avz ${HOME}/ remotehost:${HOME}