我的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 次 |
最近记录: |