为什么这个rsync命令会正确地更改用户,而不是组?

时间:2016-05-05 15:33:48

标签: command-line rsync chown

我的本​​地计算机上有一个名为foo的目录,其中包含一个名为document的文件。 foodocument的用户和群组为A:B

我想使用rsync将这些文件移动到远程目录remote-dirremote-dir包含其他目录,但不包含/foo,因此rsync将首次将/foo/foo/document引入远程目录。 remote-dir中的文件应该都有一个用户:J:L组。这是看起来像:

BEFORE

/foo/         (A:B)        /remote-dir/      (J:K)
 `- document  (A:B)         `- other/        (J:L)
                            `- directories/  (J:L)

我使用以下rsync命令执行传输*:

rsync -rv --super --owner --chown=J:L ./foo/ root@remote:/remote-dir/foo

预期

/foo/         (A:B)        /remote-dir/      (J:K)
 `- document  (A:B)         `- other/        (J:L)
                            `- directories/  (J:L)
                            `- foo/          (J:L)
                               `- document   (J:L)

我希望/foo/foo/documentremote-dir中与用户:J:L组合展示。

实际

/foo/         (A:B)        /remote-dir/      (J:K)
 `- document  (A:B)         `- other/        (J:L)
                            `- directories/  (J:L)
                            `- foo/          (J:root)
                               `- document   (J:root)

实际上,/foo/foo/document出现在remote-dir中,用户组为J:rootroot是我指定的root用户组在rsync命令(root@remote:[...])中。

根据手册页,--chown=J:L相当于--usermap=*:J --groupmap=*:L,正如我们所看到的,用户地图工作正常,但组图不是。

我做错了吗?任何不正确的假设? 我的理智清单应该是什么?

* rsync选项解释:

  • -r for recursive
  • --super因为“接收者尝试超级用户活动”(chown)
  • --owner因为chown在内部使用--usermap--groupmap,这些选项需要--owner才能运行(编辑:实际上,这是不正确的。--usermap需要--owner,但--groupmap需要单独的选项--group。)

1 个答案:

答案 0 :(得分:0)

rsync手册页有答案。

我知道第一部分:

  

要使--usermap选项产生任何效果,必须使用(或隐含)-o( - home)选项,并且接收器需要以超级用户身份运行(另请参阅 - 假超级选项)。

但我没有意识到我也需要-g( - groupmaps):

  

要使--groupmap选项产生任何效果必须使用-g( - groupss)选项(或隐含),接收者需要有权设置该组。