J'ai besoin de rsync un répertoire sur un serveur distant afin que tous les fichiers appartenant à l'utilisateur X et au groupe Y sur la machine source (locale) soient mappés à l'utilisateur W et au groupe Z sur la machine de destination (distante). Si possible en utilisant ssh comme moyen de transport, mais si j'ai besoin d'utiliser le démon rsync, c'est bien aussi.
Y-a-t-il un moyen de faire ça? Je cherche un moyen d'établir une carte utilisateur / groupe arbitraire, telle que
local user X => remote user W
local group Y => remote group Z
... and as many of these as needed.
Cela devrait être un cas d'utilisation assez courant, n'est-ce pas? Par exemple, j'ai des fichiers sur mon ordinateur local où mon nom d'utilisateur est X, et je dois les télécharger sur un serveur Web où ils doivent appartenir à un utilisateur donné qui n'a ni le même nom ni le même UID que mon utilisateur sur mon ordinateur personnel.
Je ne trouve pas cela sur la page de manuel de rsync ...
LINUX sur machine locale et distante (Ubuntu local, centOS distant)
Commande que j'ai essayée: rsync -avz / path / to / local [email protected]: / path / to / remote
la source
Réponses:
La version 3.1.0 de Rsync a introduit les options
--usermap
et--groupmap
précisément à cette fin. Voir la page de manuel .la source
La dernière version (au moins 3.1.1) de rsync vous permet de spécifier la "propriété distante":
Change la propriété de Tom en www-data (aka PHP / Nginx). Si vous utilisez Mac en tant que client, utilisez brew pour passer à la dernière version. Et sur votre serveur, téléchargez les sources d'archives, puis "faites" ça!
la source
Si vous souhaitez changer la propriété des fichiers en utilisateurs arbitraires, vous devez d'abord être root sur la zone de destination.
Je ne pense pas qu'une telle fonctionnalité soit intégrée par rsync, mais vous pouvez y parvenir en exécutant a
find
après avoir fait votre rsync.Peut-être qu'une commande comme celle-ci fera l'affaire: par exemple, traduisez depuis UID 1000 => 505 et UID 1001 => 700:
Si vous avez de nombreux utilisateurs, vous pouvez envisager d'utiliser une boucle avec un mappage, dans votre langage de prédilection.
S'amuser.
la source
id
sur votre machine pour voir. Par conséquent, si vous utilisez des ID comme celui-ci, vous supposez qu'il n'y a aucun utilisateur avec le même ID sur la machine distante et ce n'est probablement pas vrai.Je ne suis pas sûr de comprendre, pour vous connecter,
ssh
vous devez fournir un nom d'utilisateur. Ce nom d'utilisateur sera l'utilisateur W sur la machine distante qui appartient au groupe Z. Par conséquent, tout sera transféré exactement comme vous le souhaitez:EDIT en réponse au commentaire du PO.
Si vous souhaitez effectuer ce mappage utilisateur et ne pas perdre les paramètres d'autorisations, n'utilisez pas
-a
. Tout d'abord, exécutez rsync avec[email protected]
pour obtenir le bon nom d'utilisateur. Ensuite, au lieu de-a
ce qui vous fera conserver la propriété, spécifiez les options manuellement. Deman rsync
:Donc,
-a
active toutes les options ci-dessus mais vous ne voulez pas conserver le groupe ou le propriétaire. Cette commande devrait faire ce que vous voulez:Puisque vous vous connectez maintenant en tant que
mywww
et ne conservez plus les informations sur le propriétaire / groupe, les copies effectuées parrsync
appartiendront à l'mywww
utilisateur.la source
-a
permet de conserver les options de propriétaire et de groupe. Voir ma réponse mise à jour.-a
fait) ii) d'expliquer clairement toutes les contraintes que vous avez, vous venez de mentionner un seul utilisateur jusqu'à votre dernier commentaire et iii ) mentionnez votre système d'exploitation. Quoi qu'il en soit, la façon de procéderrsync
serait de copier un ensemble de fichiers en tant quemywww@remote
et l'ensemble suivant en tant queroot@remote
.-a
ce qui préserve la propriété. Les exemples que vous avez donnés suggèrent que vous ne deviez le faire que pour un seul utilisateur. Quoi qu'il en soit, je vous recommande d'utiliserrsync
, faites simplement une liste des différents fichiers que vous souhaitez copier pour chaque utilisateur et exécutez plusieurs rsyncs se connectant à la machine distante avec le nom d'utilisateur approprié. Ce sera plus simple et plus sûr.