将文件从一台服务器复制到另一台具有相同许可权

即时迁移到新的服务器,我需要移动一些网站,但我需要有相同的新/旧服务器上的服务的读/写权限。

我不需要保持组和所有者ID相同,但是如果我必须遍历旧服务器上的所有文件并检查对文件夹和文件的读/写权限,而不是在新服务器上设置,那将是非常困难的。

我的想法是打包文件复制到新的服务器和解压缩,但不知何故重置所有权限默认与644到文件和755到文件夹。 我可以以某种方式传输与旧服务器上相同权限的文件和文件夹吗?

只需使用rsync

 rsync -avz /path/to/files newserver:/path_to_files 

这将以recursion方式将旧服务器上/path/to/files所有文件复制到新服务器上的/path_to_files ,并保留权限和所有者信息。 有关更多信息,请参阅man rsync

rsync存在之前,这是一个值得了解的技巧。 有时你发现自己在一个没有rsync的系统上。

诀窍是制作文件的tar文件,将文件复制到新服务器,然后使用-p提取tar文件以保留文件权限。

“可是等等!” 你问。 “那个临时文件可能很大,比我有的空间还要大!” 别担心 你可以写一个pipe道连接两个tar ,你不需要一个临时文件,也不需要磁盘空间! 要指定stdin或stdout,请指定文件名- (连字符)。

把这一切放在一起:

 cd $SRCDIR tar -c -v -f - . | ssh $DEST_HOST "mkdir -p $DESTDIR && cd $DESTDIR && tar -x -p -f -" 

例如:

 cd /home/user12 tar -c -v -f - . | ssh other.example.com "mkdir -p $DESTDIR && cd /home/user12 && tar -x -p -vf -" 

&&就像; (分号),但意思是“如果这个成功,只执行下一个命令”。

请记住,如果您要复制文件所有者:组,则必须以root身份执行此操作。 您的普通用户帐户通常不能chown文件,因此也不能tar。 即使ssh要求input密码,该命令也能工作,因为ssh足够聪明,直到login完成才能连接pipe道。

注意: tar会更新除根目录之外的所有文件的权限,因为它没有创build它。 你用mkdir -p创build它。 如果使用tar来捕获目录而不是“。”,则可以修复此问题。 这是最后一个重复的例子,它将更新“user12”上的权限:

 cd /home tar -c -v -f - user12 | ssh other.example.com "mkdir -p /home && cd /home && tar -x -p -vf -" 

看到不同?

如果你有linux / unix,你可以使用tar来有效地存储文件的权限,所有权和软链接。

 cd /var tar zcf allmycircuits.tgz www 

我的想法是打包文件复制到新的服务器和解压缩,但不知何故重置所有权限默认与644到文件和755到文件夹。

你有没有经历的权限设置为644/755或者你只是害怕呢? 如果前者:你做了什么?

顺便说一句:如果发生了这样的问题:可以直接replace访问权限:

 getfacl --recursive . > acl.txt # and then on the other system or at the other path setfacl --restore=acl.txt 

你知道如何纠正UID / GID吗?