使用cp命令复制目录时,如何让所有文件及子目录继承目标所有权?
解决复制目录后所有文件继承目标所有权的问题
问题原因
你使用的cp -rp或cp -a命令中的-p(-a包含-p)参数作用是保留源文件的权限、所有权和时间戳。如果源文件的所有权是root:root,复制后文件会继承源的属性;而目标目录/home/user/public_html/test之所以保留目标父目录的所有权,是因为创建新目录时会继承父目录的权限规则(受umask影响),但文件是直接复制源的属性,所以出现仅目录权限正确、文件为root:root的情况。
解决方案
方案1:先复制再批量修改所有权
先不带保留属性的参数复制目录,再用chown递归修改所有权:
# 复制目录(不带-p/-a,避免保留源所有权) cp -r /home/test/ /home/user/public_html/test # 递归修改目标目录下所有内容的所有权为目标父目录的所有者(替换为实际的user:group,比如user:user) chown -R user:user /home/user/public_html/test
方案2:使用rsync一步到位(推荐)
rsync支持直接在复制时指定目标所有权,无需后续修改:
# --chown参数指定复制后所有内容的所有权,替换为实际的user:group rsync -r --chown=user:user /home/test/ /home/user/public_html/test
如果需要保留源文件的权限(仅修改所有权),可以加上-p参数:
rsync -rp --chown=user:user /home/test/ /home/user/public_html/test
内容的提问来源于stack exchange,提问作者karlosuccess
相关产品推荐
相关产品推荐

