Necesito sincronizar un directorio a un servidor remoto para que todos los archivos que pertenecen al usuario X y al grupo Y en la máquina de origen (local) se asignen al usuario W y al grupo Z en la máquina de destino (remota). Si es posible usando ssh como transporte, pero si necesito usar el demonio rsync, también está bien.
¿Hay una manera de hacer eso? Estoy buscando una manera de establecer un mapa arbitrario de usuarios / grupos, como
local user X => remote user W
local group Y => remote group Z
... and as many of these as needed.
Este debería ser un caso de uso bastante común, ¿no? Por ejemplo, tengo archivos en mi computadora local donde mi nombre de usuario es X, y necesito cargarlos en un servidor web donde deben pertenecer a un usuario determinado que no tiene el mismo nombre o el mismo UID que mi usuario en mi computadora personal
No puedo encontrar eso en la página de manual de rsync ...
LINUX en máquinas locales y remotas (Ubuntu local, centOS remoto)
Comando que probé: rsync -avz / path / to / local [email protected]: / path / to / remote
fuente
Respuestas:
Rsync versión 3.1.0 introdujo las opciones
--usermap
y--groupmap
precisamente para ese propósito. Ver la página del manual .fuente
La última versión (al menos 3.1.1) de rsync le permite especificar la "propiedad remota":
Cambia la propiedad de tom a www-data (también conocido como PHP / Nginx). Si está utilizando Mac como cliente, use brew para actualizar a la última versión. Y en su servidor, descargue las fuentes de archivos, ¡luego "hágalo"!
fuente
Si desea cambiar la propiedad de los archivos a usuarios arbitrarios, primero deberá ser root en el cuadro de destino.
No creo que haya tal característica integrada por rsync, pero puede lograrlo ejecutando un
find
después de hacer su rsync.Tal vez, un comando como este hará el truco: por ejemplo, traducir de UID 1000 => 505 y UID 1001 => 700:
Si tiene muchos usuarios, puede considerar usar un bucle con un mapeo, en su idioma de predilección.
Que te diviertas.
fuente
id
en su máquina para ver. Por lo tanto, si usa las ID de esta manera, está asumiendo que no hay ningún usuario con la misma ID en la máquina remota y eso probablemente no sea cierto.No estoy seguro de entender, para conectarse
ssh
necesita proporcionar un nombre de usuario. Ese nombre de usuario será el usuario W en la máquina remota que pertenece al grupo Z. Por lo tanto, todo se transferirá exactamente como desea que sea:EDITAR en respuesta al comentario del OP.
Si desea hacer esta asignación de usuario y no perder la configuración de permisos, no la use
-a
. Primero, ejecute rsync con[email protected]
para obtener el nombre de usuario correcto. Luego, en lugar de-a
hacer que conserve la propiedad, especifique las opciones manualmente. Deman rsync
:Por lo tanto,
-a
activa todas las opciones anteriores, pero no desea conservar el grupo o el propietario. Este comando debe hacer lo que quieras:Como ahora está iniciando sesión
mywww
y ya no conserva la información del propietario / grupo, las copias realizadas porrsync
pertenecerán almywww
usuario.fuente
-a
habilita las opciones de grupo y propietario de la reserva Ver mi respuesta actualizada.-a
hizo) ii) explique claramente todas las restricciones que tiene, acaba de mencionar a un solo usuario hasta su último comentario y iii ) mencione su sistema operativo. De todos modos, la forma de hacer estorsync
sería copiar un conjunto de archivos comomywww@remote
y el siguiente conjunto comoroot@remote
.-a
que preserva la propiedad. Los ejemplos que dio sugirieron que solo necesitaba hacer esto para un usuario. De todos modos, le recomendaría que usersync
, solo haga una lista de los diferentes archivos que desea copiar para cada usuario y ejecute múltiples rsyncs que se conectan a la máquina remota con el nombre de usuario correspondiente. Eso será más simple y seguro.