以 root 身份运行 rsync 但保留目标所有者

以 root 身份运行 rsync 但保留目标所有者

我已经检查了有关该主题的许多线程并尝试了不同的标志组合,但无法解决问题。

场景:我在用户 A 下工作,源文件归 A 所有,目标文件归用户 B 所有,我在 sudo 下使用 rsync 将源文件复制到目标,并希望目标文件在复制后仍归 B 所有。

sudo rsync -ar src/ dst/

结果:A:A

sudo rsync -ar --no-o src/ dst/

结果:(B:A如果文件内容相同)或root:A(如果文件内容不同)

如何保留B:B目标文件?

例如,简单sudo cp -r src/ dst/可以做到这一点。

答案1

使用--chown=B:B

rsync手册:

--chown=USER:GROUP

此选项强制所有文件归USERgroup 所有 GROUP。 [...] 如果 或USERGROUP 空,则不会发生省略的用户/组的映射。如果 GROUP为空,则可以省略尾随冒号,但如果USER 为空,则必须提供前导冒号。 [...]

如果您想保留目标端现有文件的所有权,那么最简单的方法是同时使用--no-group--no-user然后对目标文件和目录进行后处理,这样 root 所拥有的任何内容都会得到归其他用户所有。

这可以通过

rsync -a --no-group --no-user src/ dst

(注意/-r暗示),然后-a--archive

find dst -user  root -exec chown B {} +
find dst -group root -exec chgrp B {} +

dst这将找到root 用户或组所拥有的任何内容(这些文件将是rsync在目标位置添加的新文件),并将这些文件的所有者和组更改为B.

相关内容