我遇到了一个小问题。我在 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 时,您最终总会在远程端获得愚蠢的权限。
我使用过或听人推荐解决该问题的两种方法是:
- 定期在远程服务器上运行修复脚本,使用 cacls.exe 或其变体来更正 ACL。此技术的缺点是您的脚本需要保持最新,否则目标端的权限将与源端不匹配。这很难维护。
- 在 rsync 运行后运行 robocopy.exe,但仅使用 robocopy 将 NTFS ACL 从源复制到目标。这要求您能够使用 SMB 共享或类似技术连接到目标服务器,这意味着您同时支持 cygwin/rsync/ssh 和 SMB 共享。