Windows 上的 rsync - 远程文件夹中的权限设置不正确

Windows 上的 rsync - 远程文件夹中的权限设置不正确

我遇到了一个小问题。我在 Windows 中使用 rsync (Cygwin),但同步到远程文件夹中的文件不正确。

rsync -r /cygdrive/c/xampp/htdocs/mysite/* [email protected]:/home/mysite/public_html/

现在,我使用 rsync 上传文件,但随后我必须进入远程目录并手动更改文件/文件夹权限。

rsync 是否有 CHMOD 等选项?

谢谢,温伯特

编辑:我希望文件是 644,等等。

答案1

如果您想强制目标处的权限,则需要使用选项--chmod和/或--perms选项。

  • --chmod覆盖源权限(即 rsync 假装源权限是你指定的,而不是实际的权限)
  • --perms(或-p)强制将源权限转移到目标服务器上

例如:

rsync --chmod=a=r,u+w,D+x -p -r /cygdrive/c/xampp/htdocs/mysite/* \
    [email protected]:/home/mysite/public_html/

您没有提到 cygwin 认为源权限是什么(即ls -l /cygdrive/c/xampp/htdocs/mysite/*cygwin 中的权限)或目标端的实际权限是什么。如果我们知道这一点,也许可以构建一些更简单的东西。

如需全面了解各种选项,请参阅非常详细的rsync 手册页

请注意,rsync 尚不支持八进制权限(例如--chmod=644)。根据这篇文章,rsync 3.1.0 中将提供对此的支持。

答案2

Cygwin 无法理解 NTFS ACL,因此无法复制它们。使用 rsync 时,您最终总会在远程端获得愚蠢的权限。

我使用过或听人推荐解决该问题的两种方法是:

  1. 定期在远程服务器上运行修复脚本,使用 cacls.exe 或其变体来更正 ACL。此技术的缺点是您的脚本需要保持最新,否则目标端的权限将与源端不匹配。这很难维护。
  2. 在 rsync 运行后运行 robocopy.exe,但仅使用 robocopy 将 NTFS ACL 从源复制到目标。这要求您能够使用 SMB 共享或类似技术连接到目标服务器,这意味着您同时支持 cygwin/rsync/ssh 和 SMB 共享。

相关内容