10

Мне нужно 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

4 ответа4

16

Rsync версии 3.1.0 ввел --usermap и --groupmap именно для этой цели. Смотрите справочную страницу.

3

Последняя версия (не менее 3.1.1) rsync позволяет вам указать "удаленное владение":

--usermap=tom:www-data

Смена владельца сайта на www-data (он же PHP/Nginx). Если вы используете Mac в качестве клиента, используйте brew для обновления до последней версии. А на вашем сервере скачайте архивы с источниками, затем "сделайте" это!

0

Если вы хотите сменить владельца файлов на произвольного пользователя, сначала вам нужно быть суперпользователем в поле назначения.

Я не думаю, что есть такая функция, интегрированная в rsync, но вы можете добиться этого, запустив find после выполнения rsync.

Может быть, такая команда подойдет: например, перевести с UID 1000 => 505 и UID 1001 => 700:

find /your/rsynced/path -user 1000 -exec chown 505 {} \;
find /your/rsynced/path -user 1001 -exec chown 700 {} \;

Если у вас много пользователей, вы можете рассмотреть возможность использования цикла с отображением на вашем языке пристрастий.

Повеселись.

-1

Я не уверен, что понимаю, чтобы подключиться через ssh вам нужно указать имя пользователя. Этим именем пользователя будет пользователь W на удаленной машине, принадлежащий группе Z. Поэтому все будет передаваться именно так, как вы хотите:

rsync /path/to/local userX@remote.com/path/to/remote

РЕДАКТИРОВАТЬ в ответ на комментарий ОП.

Если вы хотите сделать это сопоставление пользователей и не потерять настройки разрешений, не используйте -a . Сначала запустите rsync с mywww@myhost.com чтобы получить правильное имя пользователя. Затем вместо -a которого вы сохраните право собственности, укажите параметры вручную. От man rsync:

    -a, --archive               archive mode; equals -rlptgoD (no -H,-A,-X)
    -r, --recursive             recurse into directories
    -l, --links                 copy symlinks as symlinks
    -p, --perms                 preserve permissions
    -t, --times                 preserve modification times
    -g, --group                 preserve group
    -o, --owner                 preserve owner (super-user only)
    -D                          same as --devices --specials

Итак, -a активирует все вышеперечисленные параметры, но вы не хотите сохранять группу или владельца. Эта команда должна делать то, что вы хотите:

rsync -rlptDvz /path/to/local mywww@myhost.com:/path/to/remote

Поскольку вы вошли в систему как mywww и больше не сохраняете информацию о владельце / группе, копии, сделанные rsync будут принадлежать пользователю mywww .

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .