Мне нужно rsync каталог на удаленный сервер, чтобы все файлы, принадлежащие пользователю X и группе Y на исходном (локальном) компьютере, были сопоставлены с пользователем W и группой Z на конечном (удаленном) компьютере. Если возможно, используя ssh в качестве транспорта, но если мне нужно использовать демон rsync, это тоже хорошо.
Есть ли способ сделать это? Я ищу способ установить произвольную карту пользователя / группы, такую как
local user X => remote user W
local group Y => remote group Z
... and as many of these as needed.
Это должно быть довольно распространенным случаем, не так ли? Например, у меня есть файлы на локальном компьютере, где мое имя пользователя - X, и мне нужно загрузить их на веб-сервер, где они должны принадлежать данному пользователю, который не имеет ни того же имени, ни того же UID, что и мой пользователь на мой персональный компьютер.
Я не могу найти это на странице руководства rsync ...
LINUX на локальной и удаленной машине (локальная Ubuntu, удаленная система centOS)
Команда, которую я попробовал: rsync -avz / path / to / local root@myhost.com: / path / to / remote
источник
Ответы:
Rsync версии 3.1.0 введена
--usermap
и--groupmap
варианты именно для этой цели. Смотрите справочную страницу .источник
Последняя версия (не менее 3.1.1) rsync позволяет вам указать «удаленное владение»:
Смена владельца сайта на www-data (он же PHP / Nginx). Если вы используете Mac в качестве клиента, используйте brew для обновления до последней версии. А на вашем сервере скачайте архивы с источниками, затем «сделайте» это!
источник
Если вы хотите сменить владельца файлов на произвольного пользователя, сначала вам нужно быть суперпользователем в поле назначения.
Я не думаю, что есть такая функция, встроенная в rsync, но вы можете добиться этого, запустив
find
после выполнения rsync.Может быть, такая команда подойдет: например, перевести с UID 1000 => 505 и UID 1001 => 700:
Если у вас много пользователей, вы можете рассмотреть возможность использования цикла с отображением на вашем языке пристрастий.
Повеселись.
источник
id
на своем компьютере, чтобы увидеть. Поэтому, если вы используете идентификаторы, подобные этому, вы предполагаете, что на удаленном компьютере нет пользователя с таким идентификатором, что, вероятно, не соответствует действительности.Я не уверен, что понимаю, чтобы подключиться через
ssh
вас необходимо предоставить имя пользователя. Этим именем пользователя будет пользователь W на удаленной машине, принадлежащий группе Z. Поэтому все будет передаваться именно так, как вы хотите:РЕДАКТИРОВАТЬ в ответ на комментарий ОП.
Если вы хотите сделать это сопоставление пользователей и не потерять настройки разрешений, не используйте
-a
. Сначала запустите rsync,mywww@myhost.com
чтобы получить правильное имя пользователя. Затем вместо того,-a
чтобы заставить вас сохранить право собственности, укажите параметры вручную. Отman rsync
:Итак,
-a
активирует все вышеперечисленные опции, но вы не хотите сохранять группу или владельца. Эта команда должна делать то, что вы хотите:Поскольку вы вошли в систему как
mywww
владелец / информация о группе и больше не сохраняете ее, копии, сделанные пользователем,rsync
будут принадлежатьmywww
пользователю.источник
-a
позволяет сохранить параметры владельца и группы. Смотрите мой обновленный ответ.-a
сделало это) ii) четко объяснить все ваши ограничения, вы упомянули одного пользователя до последнего комментария и iii ) упомяните свою ОС. В любом случае, способ сделать этоrsync
- скопировать один набор файлов, аmywww@remote
следующий набор какroot@remote
.-a
, сохраняющий право собственности. Приведенные вами примеры показывают, что вам нужно сделать это только для одного пользователя. В любом случае, я бы порекомендовал вам использоватьrsync
, просто составьте список различных файлов, которые вы хотите скопировать для каждого пользователя, и запустите несколько rsyncs, подключающихся к удаленной машине с соответствующим именем пользователя. Это будет проще и безопаснее.