为什么这个 rsync 命令正确地更改了用户,而不是组?
Why does this rsync command change the user correctly, but not the group?
我的本地计算机上有一个名为 foo
的目录,其中包含一个名为 document
的文件。 foo
和 document
的用户和组是 A:B
。
我想使用 rsync 将这些文件移动到远程目录 remote-dir
。 remote-dir
包含其他目录,但不包含 /foo
,因此 rsync 将首次将 /foo
和 /foo/document
引入远程目录。 remote-dir
中的文件都应具有 J:L
的 user:group。这是它的样子:
之前
/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/document
出现在 remote-dir
中,user:group 为 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:root
,root
是root用户组我在rsync命令中指定了(root@remote:[...]
).
根据手册页,--chown=J:L
等同于 --usermap=*:J --groupmap=*:L
,正如我们所见,usermap 工作正常,但 groupmap 不是。
我做错了什么吗?任何不正确的假设? 我的理智清单应该包括什么?
*rsync 选项解释:
-r
递归
--super
因为 "receiver attempts super-user activities" (chown)
--owner
因为 chown 在内部使用 --usermap
和 --groupmap
,并且这些选项需要 --owner
才能运行(编辑:实际上,这是不正确的。--usermap
需要 --owner
,但 --groupmap
需要单独的选项 --group
。)
rsync 手册页有答案。
我知道第一部分:
For the --usermap option to have any effect, the -o (--owner) option must be used (or implied), and the receiver will need to be running as a super-user (see also the --fake-super option).
但我没有意识到我还需要 -g (--groupmaps):
For the --groupmap option to have any effect, the -g (--groups) option must be used (or implied), and the receiver will need to have permissions to set that group.
我的本地计算机上有一个名为 foo
的目录,其中包含一个名为 document
的文件。 foo
和 document
的用户和组是 A:B
。
我想使用 rsync 将这些文件移动到远程目录 remote-dir
。 remote-dir
包含其他目录,但不包含 /foo
,因此 rsync 将首次将 /foo
和 /foo/document
引入远程目录。 remote-dir
中的文件都应具有 J:L
的 user:group。这是它的样子:
之前
/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/document
出现在 remote-dir
中,user:group 为 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:root
,root
是root用户组我在rsync命令中指定了(root@remote:[...]
).
根据手册页,--chown=J:L
等同于 --usermap=*:J --groupmap=*:L
,正如我们所见,usermap 工作正常,但 groupmap 不是。
我做错了什么吗?任何不正确的假设? 我的理智清单应该包括什么?
*rsync 选项解释:
-r
递归--super
因为 "receiver attempts super-user activities" (chown)--owner
因为 chown 在内部使用--usermap
和--groupmap
,并且这些选项需要--owner
才能运行(编辑:实际上,这是不正确的。--usermap
需要--owner
,但--groupmap
需要单独的选项--group
。)
rsync 手册页有答案。
我知道第一部分:
For the --usermap option to have any effect, the -o (--owner) option must be used (or implied), and the receiver will need to be running as a super-user (see also the --fake-super option).
但我没有意识到我还需要 -g (--groupmaps):
For the --groupmap option to have any effect, the -g (--groups) option must be used (or implied), and the receiver will need to have permissions to set that group.