¿Es posible Rsync con el propietario del destino y el permiso?

¿Es posible Rsync con el propietario del destino y el permiso?

El servidor de origen tiene un propietario que es root.

----/home/sub1/test1 
----/home/sub2/test1

Mi máquina local es el destino.

----/home/sub1/test1 owner by user1
----/home/sub2/test1 owner by user2

¿Cómo puedo sincronizar un nuevo archivo de actualización del servidor de origen con la máquina local y no cambiar el propietario local?

Editar

Necesito sincronizar todas las fuentes en un solo comando porque tengo muchas carpetas y la máquina local también tiene muchos propietarios. ¿Puede ser posible?

Gracias.

Respuesta1

Parece que no quieres que cambien después de la transferencia.

Pruebe el siguiente comando:

rsync -avr -o -g /source/directory user@:destinationHost/destination/directory

Si no utiliza estas opciones, el usuario y el grupo se cambiarán al usuario que invoca en el extremo receptor. Si desea especificar algún otro usuario, deberá agregar un comando chown a su secuencia de comandos.

-o, --owner
    This option causes rsync to set the owner of the destination file to be 
    the same as  the source file, but only if the receiving rsync is being run 
    as the super-user (see also the --super and --fake-super options). Without 
    this option, the owner of new and/or transferred files are set to the invoking 
    user on the receiving side...

-g, --group
    This option causes rsync to set the group of the destination file to be the same as 
    the source file. If the receiving program is not running as the super-user (or if
    --no-super was specified), only groups that the invoking user on the receiving side
    is a member of will be preserved. Without this option, the group is set to the default
    group of the invoking user on the receiving side...

SEE MAN rsync

Respuesta2

Creo que una buena opción para usted podría ser simplemente realizar rsync desde el origen al destino normalmente, asumiendo que se trata de una transferencia física separada del sistema de archivos, usando algo como

rsync -e 'ssh -p 22' -quaxz --bwlimit=1000 --del --no-W --delete-excluded --exclude-from=/excludedstufflist /sourcedir serverIP:/destinationdir

y luego, cuando todo esté copiado en el lugar correcto en el nuevo sistema, descubra qué nuevos UID proporcionó su sistema a los datos del sistema fuente. Probablemente sea 1001, 1002, etc. En cuyo caso puedes hacer fácilmente una

find /destinationdir -user 1001 -exec chown username '{}' \;
find /destinationdir -user 1002 -exec chown otherusername '{}' \;
etc.

Sí, tendrías que hacer eso último 100 veces, pero podrías escribirlo fácilmente si conoces la secuencia UID utilizada durante rsync. He hecho exactamente esto una vez, migrando alrededor de 60 usuarios de un servidor a otro. y funcionó razonablemente bien. También necesitaba reemplazar los permisos de grupo, trato similar;

chown --from=oldguy newguy * -R
chown --from=:friends :family * -R

Cosas como esas. Espero que puedas usar esto.

Respuesta3

No puedes hacer esto con un solo comando. Sin embargo, incluso con más de 100 usuarios es bastante sencillo automatizar la tarea, así que no veo por qué insistes en que tiene que ser un solo comando.

Necesitasjalarlos datos de la máquina de destino en este escenario. En teoría, sería posible impulsar la transferencia desde el servidor de origen mediante un túnel rsynca través de un túnel inverso, sshlo que sería considerablemente más complicado.

for testdir in /home/sub*/test1
do
    owner=$(stat -c %u "$testdir")
    rsync -avP --chown "$u" sourceserver:"$testdir"/ "$testdir"/
done

Si no tienes la --chownbandera, puedes emularla con un proceso de dos pasos:

for testdir in /home/sub*/test1
do
    owner=$(stat -c %u "$testdir")
    rsync -avP --no-owner sourceserver:"$testdir"/ "$testdir"/
    chown -R "$u" "$testdir"                   # If possible
    # find "$testdir" -exec chown "$u" {} +    # Otherwise
done

Si necesita usar la findvariante y findno la entiende +, reemplácela con la variante ligeramente menos eficiente \;(es decir, punto y coma de reacción).

información relacionada