【问题标题】:Rsync on Windows: wrong permissions for created directoriesWindows 上的 Rsync:创建目录的权限错误
【发布时间】:2011-08-13 12:25:24
【问题描述】:

我正在尝试使用rsync 在 Windows (cygwin) 上通过 ssh 将更改推送到我的服务器。 我使用的命令是:

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

/srv/www/prj112/myfolder/rsyncuser 所有。我的问题是,尽管rsync 子目录是在发布时创建的,但每个目录都分配了d--------- 的默认权限,因此rsync 无法复制其中的任何文件。

我该如何解决这个问题?

【问题讨论】:

  • 您能否发布您的 Windows 和 Cygwin 版本以及以下命令的输出:ls -la /srv/www/prj112/myfolder?

标签: windows rsync


【解决方案1】:

您的问题源于该目录上的 Unix 权限确实为 0。所有访问信息都存储在单独的 ACL 中,rsync 不会复制这些 ACL。因此,它将远程副本的权限设置为 0,并且显然之后无法写入该目录。 你可以运行

chmod -R 775

在那个目录上,它应该可以解决你的 rsync 问题。

查看联机帮助页后,我可以看出 chmod 参数自版本 ~2.6.8 起在 rsync 中可用。但是你必须将--chmod=ugo=rwXrsync -av结合使用

你也应该试试这个命令:

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

它至少可以在 Linux 上运行。请注意,rsync 不需要提及 ssh——至少在 Linux 上是这样。

但如果一切都失败了,只是为了提供一个选项,你可以看看这个现成的打包工具cwRsync

【讨论】:

    【解决方案2】:

    要从 Windows rsync 到 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%
    

    等等。这将备份您的目录 mySensibleDatamyOtherSensibleDatamyOtherSensibleData2,目录权限为 755,文件权限为 644。您还可以在 %BACKUPLOGFILE% 中获取每个备份的备份日志。

    【讨论】:

      【解决方案3】:

      另外,您可以尝试创建一个(全局)环境变量CYGWIN 并将其值设置为nontsec

      【讨论】:

        【解决方案4】:

        当某些进程打开目标文件时,Cygwin rsync 将报告权限被拒绝。下载并运行进程资源管理器,看看是否有其他东西锁定了文件,或者只是尝试重命名文件,看看你是否收到关于其他进程打开文件的 Windows 错误。

        【讨论】:

          【解决方案5】:

          如果您从 Windows 部署站点(例如 octopress 使用 rsync),则可以将权限设置为 775 添加多个 chmod 命令:

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

          【讨论】:

          • 请注意,这似乎也是 755 的文件,而不仅仅是目录,这通常不建议用于网络主机。
          【解决方案6】:

          忽略 NTFS 权限的选项在 Cygwin 1.7 版中已更改。这可能是导致问题的原因。

          尝试在 C:\cygwin\etc\fstab 中的 Cygwin 挂载中添加“noacl”标志,例如:

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

          您可以使用 'chmod' 选项通过 rsync 传递自定义权限:

          rsync -rvz --chmod=ugo=rwX -e ssh source destination
          

          【讨论】:

          • --chmod=Du=rwx,Dgo=rx,Fu=rw,Fgo=r(755DIRs 644FILEs,默认)
          • 如果您独立于 cygwin 安装运行,请使用cygpath 实用程序来识别fstab 的位置,以便使用cygpath -w /etc/fstab 写入。这通常相对于%TMP% 或当前目录。
          • fwiw 以上noacl--chmod 的建议都不适合我。但是使用--no-perms 有效。
          • 就我而言,通过巧克力安装 cwRsync 时没有cygpath 命令。似乎没有安装 dygwin\etc\fstab 时如何编辑它? ?
          猜你喜欢
          • 2015-12-19
          • 2018-02-09
          • 2017-11-10
          • 1970-01-01
          • 2012-02-28
          • 2012-06-13
          • 2016-04-30
          • 2022-01-05
          • 1970-01-01
          相关资源
          最近更新 更多