我已经检查了有关该主题的许多线程并尝试了不同的标志组合,但无法解决问题。
场景:我在用户 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
此选项强制所有文件归
USER
group 所有GROUP
。 [...] 如果 或USER
为GROUP
空,则不会发生省略的用户/组的映射。如果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
.