当我将包含文件的文件夹从用户名为 srv1 的 srv1 传输到用户名为 srv2 的 srv2 时,srv2 上传输的文件夹及其包含的文件将保留所有权 srv1
scp -r /var/www/vhosts/srv1.com/httpdocs/profile_image [email protected]:/var/www/vhosts/srv2.com/httpdocs
有没有办法在传输时立即将目标位置上传输的文件夹/文件的所有者更改为 srv2,而不是事后再执行此操作?
答案1
scp
没有可以动态更改所有权的选项,但是rsync
...它有-og --chown=user:group
...所以,您可以执行以下操作:
rsync -og --chown=srv2 /var/www/vhosts/srv1.com/httpdocs/profile_image [email protected]:/var/www/vhosts/srv2.com/httpdocs
仅更改用户并保留源组...您还可以使用-og --chown=:group
(注意冒号:
) 保持源用户不变或明显改变两者-og --chown=user:group
...这些不会影响原始源文件/目录,而是会被发送到目标连接 shell,就好像它们实际上最初同样应用于源文件/目录一样,替换原始源文件/目录的实际所有权属性。
通告:
用户(在来源机器)必须具有更改原始文件所有权的权限。
--archive, -a
如果使用该选项,则-og
可能不需要该选项。如果您未指定上述任何或其他用户和组保留选项,则文件/目录所有权将设置为远程用户(
root
你的情况) 默认情况下。在处理远程复制/同步工具时
rsync
,可能值得阅读:使用 scp 复制包含空格的远程文件需要双空格转义。为什么?你可能想读
man rsync
并在发出第一个命令之前熟悉其其他复制/同步选项。