将文件夹从一个Unix服务器复制到另一个,更新所有者ID


2

我正在使用此处描述的方法将目录从一个Unix服务器复制到另一个(Ubuntu 14.04):

rsync -aruv localfolder/ user@server:destination/

我需要保留相同的所有者和权限,但新计算机上的用户ID可能不同。我认为这就是为什么所描述的方法对我来说不正常的原因:所有文件都获得所有者my-user:my-user(假设我正在使用my-user@server)将文件复制到服务器。

所以,基本上,我需要做的是复制文件夹(这样做),然后,对于每个文件,检查新机器上具有相同名称的用户的ID,并更新新机器上的所有者使用新ID。
这可能吗?或者有更简单的方法吗?


就是我最后所做的,但这不是一个简洁的解决方案,迈克尔Kjörling的答案应该是首选。

Answers:


4

您正在寻找的此行为由rsync的-o( - home)开关控制,可能与--no-numerics-ids。手册页描述了 - 因此(我的重点):

-o, --owner
此选项使rsync将目标文件的所有者设置为与源文件相同,但仅当接收rsync作为超级用户运行时(另请参阅--super和--fake-super选项) 。如果没有此选项,则新文件和/或传输文件的所有者将设置为接收方的调用用户。

所有权的保护将匹配名称默认情况下,关联但可能回落到在某些情况下使用的ID号(也看到了--numeric-ids一个完整的讨论选项)。

有一个类似的选项-g( - group)适用于组。

然而,这两种应该暗示的-a,这意味着你需要更多的东西。这个“更多的东西”在选项说明中的这个小花絮详细说明,IMO很容易错过:

仅当接收rsync作为超级用户运行时

因此,接收rsync必须以root身份运行。当你考虑它时,这是有道理的,因为只有root才能将文件的所有权更改为任意用户(这基本上就是你要求做的事情)。

因此,请确保远程rsync守护程序以root身份运行,并且在使用-a(或-og)开关时应尽可能保留文件所有权(基于用户名和组名)。


1

这就是我最后所做的,但这不是一个简洁的解决方案。

幸运的是,我知道用户ftp,www-data,my-user,root和groups ftp,www-data,root只拥有文件。

所以,在我运行的旧机器上(在我复制的文件夹的基础上)

find . -user ftp -print > temp-user.ftp.txt
find . -user www-data -print > temp-user.www-data.txt
find . -user my-user -print > temp-user.my-user.txt
find . -user root -print > temp-user.root.txt
find . -group ftp -print > temp-group.ftp.txt
find . -group www-data -print > temp-group.www-data.txt
find . -group root -print > temp-group.root.txt

现在,例如,temp-user.ftp.txt包含ftp用户拥有的所有文件的列表。并且temp-group.ftp.txt是具有组ftp的所有文件的列表。例如,temp-user.ftp.txt可能看起来像这样:

./some-file.txt
./a-directory
./a-directory/lower-level-file.mp3

使用某些编辑器,使它看起来像这样(例如,更换\n"\nchown *** "并且在开始和文件的末尾手动清理了一下):

chown ftp "./some-file.txt"
chown ftp "./a-directory"
chown ftp "./a-directory/lower-level-file.mp3"

当然,在这里,改变chown ftp以匹配文件 - temp-group.www-data.txt会得到chgrp www-data,等等。

我用新的服务器运行这些文件。

所以这对我有用,但是,

  • 这不是一个好的解决方案,
  • 它需要一些手工工作,
  • 并要求您知道用户和组在目录中拥有文件的内容。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.