Rsync on Windows: wrong permissions for created directories
我正在尝试使用
rsync -rvz -e ssh /cygdrive/c/myfolder/ [email protected]:/srv/www/prj112/myfolder/
我该怎么解决这个问题?
在Cygwin 1.7版中,忽略NTFS权限的选项已更改。这可能是导致问题的原因。
尝试将"noacl"标志添加到c:cygwinetcfstab中的cygwin挂载,例如:
1 | none /cygdrive cygdrive user,noacl,posix=0 0 0 |
您可以使用"chmod"选项通过rsync传递自定义权限:
1 | rsync -rvz --chmod=ugo=rwX -e ssh source destination |
如果从Windows部署站点(例如,octopress使用rsync),可以将权限设置为775,添加多个chmod命令:
1 | rsync -avz --chmod=ug=rwx --chmod=o=rx -e ssh |
您的问题源自这样一个事实:该目录上的Unix权限实际上是0。所有访问信息都存储在单独的ACL中,rsync不会复制这些ACL。因此,它将远程副本上的权限设置为0,并且很明显,之后无法写入该目录。你可以跑
1 | chmod -R 775 |
在那个目录上,这将解决您的rsync问题。
查看手册页后,我可以知道chmod参数在rsync中从2.6.8版开始就可用。但是你必须把
您还应该尝试以下命令:
1 | rsync -av <SOURCE_DIR> [email protected]:/srv/www/prj112/myfolder |
它至少可以在Linux上工作。注意rsync不需要提到ssh——至少在Linux上是这样。
但是,如果所有操作都失败了,并且只是给出一个选项,那么您可以看看这个现成的打包工具cwrsync。
要从Windows同步到Unix/Linux,您应该提供如下命令
1 2 3 4 5 6 7 | 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命令是
1 | 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,包含忽略元素行,如
1 2 3 4 5 6 | .git .svn .o \Debug elease |
然后在脚本中使用
1 2 3 | %BACKUP% /cygdrive/c/mySensibleData %STORAGEURI% %BACKUP% /cygdrive/c/myOtherSensibleData %STORAGEURI% %BACKUP% /cygdrive/c/myOtherSensibleData2 %STORAGEURI% |
等等。这将备份目录mysensibledata、myothersensiledata和myothersensiledata2,目录的权限为755,文件的权限为644。您还可以在每个备份的%backuplogfile%中获取备份日志。
当某个进程打开目标文件时,cygwin rsync将报告权限被拒绝。下载并运行进程资源管理器,查看是否有其他内容正在锁定该文件,或者只需尝试重命名该文件,然后查看是否收到有关打开该文件的其他进程的Windows错误信息。
此外,还可以尝试创建(全局)环境变量