Rsync в Windows: неправильные разрешения для созданных каталогов - PullRequest
46 голосов
/ 27 апреля 2011

Я пытаюсь отправить изменения на мой сервер через ssh на windows (cygwin), используя rsync. Я использую команду:

rsync -rvz -e ssh / cygdrive / c / myfolder / rsyncuser@192.168.1.110: / srv / www / prj112 / myfolder /

/srv/www/prj112/myfolder/ принадлежит rsyncuser. Моя проблема в том, что даже если rsync подкаталоги создаются при публикации, каждому каталогу назначается разрешение по умолчанию d---------, поэтому rsync не удается скопировать любые файлы внутри него.

Как мне это исправить?

Ответы [ 6 ]

66 голосов
/ 06 мая 2011

Возможность игнорировать разрешения NTFS изменилась в Cygwin версии 1.7. Это может быть причиной проблемы.

Попробуйте добавить флаг 'noacl' на ваши крепления Cygwin в C: \ cygwin \ etc \ fstab, например:

none /cygdrive cygdrive user,noacl,posix=0 0 0

Вы можете передавать пользовательские права через rsync, используя опцию 'chmod':

rsync -rvz --chmod=ugo=rwX -e ssh source destination
7 голосов
/ 19 сентября 2012

если вы развертываете сайт из windows (например, octopress использует rsync), можно установить разрешение 775, добавив несколько команд chmod:

   rsync -avz --chmod=ug=rwx --chmod=o=rx -e ssh
7 голосов
/ 12 мая 2011

Ваша проблема связана с тем фактом, что разрешения Unix для этого каталога действительно равны 0. Вся информация о доступе хранится в отдельных списках ACL, которые rsync не копирует. Таким образом, он устанавливает разрешения для удаленной копии равными 0 и, очевидно, не может выполнить запись в этот каталог впоследствии. Вы можете запустить

chmod -R 775

в этом каталоге, что должно исправить вашу проблему с rsync.

После просмотра справочной страницы я могу сказать, что параметр chmod доступен в rsync начиная с версии ~ 2.6.8. Но вы должны использовать --chmod=ugo=rwX в сочетании с rsync -av

Вам также следует попробовать эту команду:

rsync -av <SOURCE_DIR> rsyncuser@192.168.1.110:/srv/www/prj112/myfolder

По крайней мере, это будет работать в Linux. И обратите внимание, что rsync не должен упоминать ssh - по крайней мере, в Linux.

Но если все не получается и вы можете просто выбрать опцию, вы можете взглянуть на этот готовый упакованный инструмент cwRsync

2 голосов
/ 15 августа 2013

Для rsync из Windows в Unix / Linux вы должны предоставить команду типа

SET BACKUP_SERVER=my.backup.server
SET SSH_USER=theUnixUserName
SET STORAGEPATH=/home/%SSH_USER%/Backup/
SET STORAGEURI=%BACKUP_SERVER%:%STORAGEPATH%    
SET SSH_ID=/cygdrive/c/Users/theWindowsUserName/Documents/keyfiles/id_dsa
SET EXCLUDEFILE=backup_excludes.txt
SET BACKUPLOGFILE=/cygdrive/c/Users/theWindowsUserName/Backuplogs/backup-%DATE%-%TIME::=-%.log

Команда ssh тогда будет

SET BACKUP=rsync -azvu --chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r --rsh="ssh -l %SSH_USER% -i '%SSH_ID%'" --exclude-from=%EXCLUDEFILE% --delete --delete-excluded --log-file="%BACKUPLOGFILE%"

с backup_excludes.txt содержит строки игнорируемых элементов, таких как

.git
.svn
.o
\Debug
\Release

Затем вы будете использовать это в скрипте с

%BACKUP% /cygdrive/c/mySensibleData %STORAGEURI%
%BACKUP% /cygdrive/c/myOtherSensibleData %STORAGEURI%
%BACKUP% /cygdrive/c/myOtherSensibleData2 %STORAGEURI%

и так далее.Это создаст резервную копию ваших каталогов mySensibleData , myOtherSensibleData и myOtherSensibleData2 с разрешениями 755 для каталогов и 644 для файлов.Вы также получаете журналы резервного копирования в вашем % BACKUPLOGFILE% для каждой резервной копии.

1 голос
/ 26 февраля 2013

Cygwin rsync сообщит об отказе в разрешении, когда какой-либо процесс откроет целевой файл.Загрузите и запустите Process Explorer и выясните, не блокирует ли файл что-либо еще, или просто попробуйте переименовать файл, и посмотрите, нет ли ошибки Windows в том, что какой-то другой процесс открыл файл.

0 голосов
/ 23 июля 2013

Кроме того, вы можете попытаться создать (глобальную) переменную среды CYGWIN и установить для нее значение nontsec

...