这就是我想要做的:
rsync -rvl --chmod=ug=rwX,o=rX test /var/www
在我这样做之后,我得到的结果如下:
drwxr-xr-x
(实际上它是drwxr-sr-x,但这可能并不重要......是吗?)
这显然不是我想要的.我希望该组具有写权限,但由于某种原因,rsync命令不设置它们.
任何人有任何想法为什么不呢?我的语法有错吗?如果它有用,我将从OSX转移到Linux(Debian).
更新: 此外,如果它有用,当我输入umask时,我得到0002.所以这不是问题.
--chmod
覆盖发送方权限,但如果您未指定-p
或--perms
同样使用目标默认值(即--chmod
忽略).
来自man 1 rsync:
--chmod
此选项告诉rsync将一个或多个以逗号分隔的"chmod"字符串应用于传输中文件的权限.结果值被视为发送方为文件提供的权限,这意味着如果未启用--perms, 此选项似乎对现有文件没有影响.
你必须使用--chmod
与-p
选项,如下所示:
$ rsync -avz --chmod=o-rwx -p tata/ tata2/
这是一个完整的测试:
$ mkdir tata $ mkdir tata2 $ cd tata $ touch tyoto $ touch tiuti
u=rw, g=r, o=r
$ ls -l total 0 -rw-r--r-- 1 romain users 0 fév 16 11:48 tiuti -rw-r--r-- 1 romain users 0 fév 16 11:48 tyoto
$ cd .. $ rsync -avz tata/ tata2/
$ ls -l tata2 total 0 -rw-r--r-- 1 romain users 0 fév 16 11:48 tiuti -rw-r--r-- 1 romain users 0 fév 16 11:48 tyoto
--chmod=o-rwx -p
$ rsync -avz --chmod=o-rwx -p tata/ tata2/ $ ls -l tata2 total 0 -rw-r----- 1 romain users 0 fév 16 11:48 tiuti -rw-r----- 1 romain users 0 fév 16 11:48 tyoto
我想你需要添加--perms
(aka -p
).从联机帮助页引用:
禁用此选项时,权限设置如下:
...
新文件将其"正常"权限位设置为源文件的权限,该权限使用接收目录的默认权限(接收进程的umask或通过目标目录的默认ACL指定的权限)进行屏蔽,并禁用其特殊权限位,但在新目录从其父目录继承setgid位的情况.
我怀疑你的目标系统有一个像022这样的典型umask,它阻止了rsync设置组写位.不幸的是--chmod
,没有提到umask如何应用或不适用.