Подтвердить что ты не робот

Rsync в Windows: неправильные разрешения для созданных каталогов

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

rsync -rvz -e ssh/cygdrive/c/myfolder/[email protected]:/srv/www/prj112/myfolder/

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

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

4b9b3361

Ответ 1

Возможность игнорировать разрешения 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

Ответ 2

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

chmod -R 775

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

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

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

rsync -av <SOURCE_DIR> [email protected]:/srv/www/prj112/myfolder

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

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

Ответ 3

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

   rsync -avz --chmod=ug=rwx --chmod=o=rx -e ssh

Ответ 4

Чтобы выполнить 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

Тогда вы использовали бы это в script с

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

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

Ответ 5

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

Ответ 6

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