Назад | Перейти на главную страницу

rsync в Windows - права доступа в удаленной папке установлены неправильно

У меня небольшая проблема. Я использую rsync (Cygwin) в Window, и файлы, которые синхронизируются в моей удаленной папке, неверны.

rsync -r /cygdrive/c/xampp/htdocs/mysite/* me@mysite.com:/home/mysite/public_html/

Прямо сейчас я использую rsync для загрузки файлов, НО затем я должен зайти в свой удаленный каталог и вручную изменить права доступа к файлам / папкам.

Есть ли у rsync возможность использовать CHMOD и т. Д.?

Спасибо, Венберт

РЕДАКТИРОВАТЬ: я бы хотел, чтобы файлы были 644 и т. Д.

Cygwin не понимает списки ACL NTFS и не может их реплицировать. Вы всегда будете получать глупые разрешения на удаленной стороне с помощью rsync.

Два метода, которые я использовал или слышал, рекомендуют решить эту проблему:

  1. Периодически запускайте сценарий исправления на удаленном сервере, используя cacls.exe или какой-либо его вариант для исправления списков контроля доступа. Недостатком этого метода является то, что ваш скрипт необходимо поддерживать в актуальном состоянии, иначе разрешения на стороне назначения не будут соответствовать источнику. Это сложно поддерживать.
  2. После запуска rsync выполните запуск robocopy.exe, но используйте robocopy только для репликации списков контроля доступа NTFS от источника к месту назначения. Для этого требуется, чтобы вы могли подключиться к целевому серверу, используя общий ресурс SMB или аналогичный метод, что означает, что вы поддерживаете как cygwin / rsync / ssh, так и общий ресурс SMB.

Если вы хотите принудительно установить разрешения в месте назначения, вам нужно будет использовать --chmod вариант и / или --perms вариант.

  • --chmod переопределяет разрешения источника (т.е. rsync делает вид, что разрешения источника - это то, что вы указали, а не то, что они есть на самом деле)
  • --perms (или -p) принудительно устанавливает разрешения источника на целевой сервер

Например:

rsync --chmod=a=r,u+w,D+x -p -r /cygdrive/c/xampp/htdocs/mysite/* \
    me@mysite.com:/home/mysite/public_html/

Вы не упомянули, что cygwin считает исходными разрешениями (т.е. ls -l /cygdrive/c/xampp/htdocs/mysite/* в cygwin) или какие фактические разрешения оказываются на стороне назначения. Если бы мы знали это, можно было бы построить что-нибудь попроще.

Для тщательного освещения различных опций обратитесь к очень подробному справочная страница rsync.

Обратите внимание, что rsync еще не поддерживает восьмеричные разрешения (например, --chmod=644). Согласно этому сообщению, поддержка этого будет доступна в rsync 3.1.0.