通过SSH的rsync仅保留对www-data拥有的文件的所有权

jef*_*ind 13 linux ssh webserver rsync

我使用rsync将Web文件夹结构从本地服务器复制到远程服务器.两台服务器都是ubuntu linux.我使用以下命令,它运行良好:

rsync -az /var/www/ user@10.1.1.1:/var/www/
Run Code Online (Sandbox Code Playgroud)

本地系统和远程系统的用户名不同.根据我的阅读,可能无法保留所有文件和文件夹所有者和组.没关系,但我想保留两个服务器上都存在的www-data用户的所有者和组.

这可能吗?如果是这样,我将如何做到这一点?

**编辑**

有人提到rsync能够在这里保留远程文件同步的所有权和组:http://lists.samba.org/archive/rsync/2005-August/013203.html

**编辑2**

由于这里有许多有用的评论和答案,我最终获得了理想的效果.假设源计算机的IP是10.1.1.2,目标计算机的IP是10.1.1.1.我可以在目标机器上使用这一行:

sudo rsync -az user@10.1.1.2:/var/www/ /var/www/
Run Code Online (Sandbox Code Playgroud)

这样可以保留具有通用用户名的文件的所有权和组,例如www-data.请注意,使用rsyncwithout sudo不会保留这些权限.

gho*_*oti 21

您还可以使用以下--rsync-path选项在目标主机上执行rsync :

# rsync -av --rsync-path="sudo rsync" /path/to/files user@targethost:/path
Run Code Online (Sandbox Code Playgroud)

这使您可以像usertargethost 一样进行身份验证,但仍然可以获得特权写入权限sudo.您必须在目标主机上修改您的sudoers文件,以避免sudo请求您的密码. man sudoers或运行sudo visudo指示和样品.

您提到您希望保留www-data拥有的文件的所有权,但不保留其他文件的所有权.如果确实如此,那么除非您实施chown或第二次rsync更新权限,否则您可能会失败.没有办法告诉rsync只保留一个用户的所有权.

也就是说,您应该阅读rsync的--files-from选项.

rsync -av /path/to/files user@targethost:/path
find /path/to/files -user www-data -print | \
  rsync -av --files-from=- --rsync-path="sudo rsync" /path/to/files user@targethost:/path
Run Code Online (Sandbox Code Playgroud)

我没有对此进行测试,所以我不确定管道查找输出的确切方式--files-from=-.你无疑需要进行实验.