如何在UNIX无root权限下复制文件夹并保留所有者与权限?
解决方案
核心原因是普通用户没有修改文件所有者的权限:cp -a/cp -p只能保留自己拥有的文件的所有者和权限,复制他人文件时,新文件的所有者会强制变为当前操作的用户——只有root能跨用户保留所有者信息。
结合你只能用user1和user2身份操作的情况,分两步处理即可:
1. 以user1身份复制所有属于user1的文件/目录
用rsync按用户筛选同步,或者find+cp组合,确保保留所有者和权限:
方法A:rsync(更简洁)
rsync -av --filter="user,user1" /path/to/source/a/ /path/to/target/b/
--filter="user,user1"会只同步源目录中属于user1的内容,-av参数保留权限、时间戳等元信息,且因为是user1操作自己的文件,同步后目标文件的所有者仍为user1。
方法B:find+cp(兼容无rsync的环境)
find /path/to/source/a -user user1 -exec cp -a {} /path/to/target/b/{} \;
注意:如果源路径是绝对路径,目标路径需要确保目录结构一致,或者调整为find /path/to/source/a -user user1 -exec cp -a {} /path/to/target/b/$(dirname {}) \;来自动创建对应子目录(部分系统需微调语法)。
2. 以user2身份复制所有属于user2的文件/目录
重复类似操作,覆盖目标目录中对应位置的内容(确保user2的文件保留自身所有者和权限):
方法A:rsync
rsync -av --filter="user,user2" /path/to/source/a/ /path/to/target/b/
方法B:find+cp
find /path/to/source/a -user user2 -exec cp -a {} /path/to/target/b/{} \;
注意事项
- 确保user1和user2互相拥有对对方文件的读取权限,否则无法复制对方的内容。
- 源目录a本身属于user1,第一步user1的操作已同步目录结构并保留所有者,无需额外处理。
内容的提问来源于stack exchange,提问作者user1508682
相关产品推荐
相关产品推荐

