Страница 1 из 1

rsync chmod

Добавлено: 2010-07-05 12:44:49
gabell
Добрый день!
Есть проблемка с назначением прав на каталоги и файлы на удаленной машине при синхронизации с помощью rsync.
Сейчас запускаю так:

Код: Выделить всё

/usr/local/bin/rsync -avz --delete-after --chmod=o=rx /dir1 remote.example.com:/data/dir2
И получаю o+rx и для каталогов, и для файлов, что не есть хорошо. Может кто-нибудь пролить свет на использование этой опции у rsync.
Пробовал также:

Код: Выделить всё

/usr/local/bin/rsync -avz --delete-after --no-p /dir1 remote.example.com:/data/dir2
Но тогда на удаленные каталоги назначаются права 750, хотя локально 770. Видимо параметры umask не влияют на то, с какими правами создаются каталоги.

Код: Выделить всё

sudo -u rsync_user mkdir dir
на удаленной машине дает то, что нужно: 755.

Конечно можно написать скрипт в три строчки, где с помощью find и chmod делать, то, что мне нужно . Но, во-первых, в этих каталогах очень много маленьких файлов, во-вторых не люблю использовать скрипты, там где их можно заменить одной программой, а в-третьих, просто любопытство разбирает.

ЗЫ. Пока писал это сообщение, понял, что пока не знаю, как запускать chmod на удаленной машине, после того, как отработает rsync на локальной. Это если все-таки придется использовать скрипт.

Re: rsync chmod

Добавлено: 2010-07-05 18:56:56
gabell
Любопытство было настолько сильным, что я полез в исходники :smile:

Код: Выделить всё

if (state != STATE_2ND_HALF) {
             switch (*modestr) {
             case 'D':
                 if (flags & FLAG_FILES_ONLY)
                     state = STATE_ERROR;
                 flags |= FLAG_DIRS_ONLY;
                 break;
             case 'F':
                 if (flags & FLAG_DIRS_ONLY)
                     state = STATE_ERROR;
                 flags |= FLAG_FILES_ONLY;
                 break;
Таким образом, чтобы получить, то, что мне нужно:

Код: Выделить всё

/usr/local/bin/rsync -avz --delete-after --chmod=Do=rx,Fo=r /dir1 remote.example.com:/data/dir2

Re: rsync chmod

Добавлено: 2010-07-05 21:42:19
ViktorichZ
-a --super --delete --backup
даже UID поставит