我的umask是0002。
那么当 I 时rsync -r me@remote:new .,为什么结果组不可写?
drwxrwsr-x 10 root developers 4096 Aug 22 12:55 .
drwxrwsr-x 12 root developers 4096 Jul 14 19:05 ..
drwxrwsr-x 3 root developers 4096 May 16 15:04 old
drwxr-sr-x 4 aaronadams developers 4096 Jun 26 15:17 new
Run Code Online (Sandbox Code Playgroud)
我错误地认为rsync没有-p标志的推/拉工作类似于git推/拉,并且新文件将具有完全权限减去umask.
但是,即使没有-p标志,rsync仍然保留源文件的权限。该-p标志仅指示rsync(尝试)忽略接收者的umask.
根据man rsync:
新文件的“正常”权限位设置为源文件的权限被接收端的
umask设置屏蔽,并且它们的特殊权限位被禁用,除非新目录setgid从其父目录继承了一些。
更好的是,有一个关于如何创建忽略源权限的标志的简单建议:
要为新文件提供目标默认权限(同时保持现有文件不变),请确保
--perms关闭并使用该选项--chmod=ugo=rwX(这确保启用所有非屏蔽位)。如果您想让后一种行为更易于键入,您可以popt为其定义一个别名,例如将此行放在文件中~/.popt(这定义了-s选项,并包含--no-g使用目标目录的默认组):Run Code Online (Sandbox Code Playgroud)rsync alias -s --no-p --no-g --chmod=ugo=rwX然后,您可以在这样的命令中使用这个新选项:
Run Code Online (Sandbox Code Playgroud)rsync -asv src/ dest/(警告:确保
-a不遵循-s,否则将重新启用--no-*选项。)
我想我会这样做!
| 归档时间: |
|
| 查看次数: |
4065 次 |
| 最近记录: |