远程Linux服务器到远程linux服务器目录复制。怎么样?

时间:2008-09-16 04:35:44

标签: linux data-transfer

将目录(带有子目录和文件)从一个远程Linux服务器复制到另一个远程Linux服务器的最佳方法是什么?我已使用SSH客户端(如Putty)连接到两者。我有两个root访问权限。

16 个答案:

答案 0 :(得分:61)

我通常有两种方法,都使用ssh:

scp -r sourcedir/ user@dest.com:/dest/dir/

或者,更强大,更快(在传输速度方面)方法:

rsync -auv -e ssh --progress sourcedir/ user@dest.com:/dest/dir/

如果您想了解有关它们如何工作的更多详细信息,请阅读每个命令的手册页。

答案 1 :(得分:29)

我会修改之前建议的回复:

rsync -avlzp /path/to/sfolder name@remote.server:/path/to/remote/dfolder

如下:

-a(用于存档)意味着-rlptgoD所以上面的l和p是多余的。我还想包括-H,它复制硬链接。它不是-a的一部分,因为它很昂贵。所以现在我们有了这个:

rsync -aHvz /path/to/sfolder name@remote.server:/path/to/remote/dfolder

你还必须小心尾随斜杠。你可能想要

rsync -aHvz /path/to/sfolder/ name@remote.server:/path/to/remote/dfolder

如果希望源“sfolder”的内容出现在目的地“dfolder”中。如果没有尾部斜杠,将在目标“dfolder”中创建“sfolder”子目录。

答案 2 :(得分:9)

rsync -avlzp / path / to / folder name@remote.server:/ path / to / remote / folder

答案 3 :(得分:5)

scp -r <directory> <username>@<targethost>:<targetdir>

答案 4 :(得分:5)

登录一台计算机

  

$ scp -r / path / to / top / directory user @ server:/ path / to / copy

答案 5 :(得分:3)

如果任务重复,请尝试同步。 http://www.cis.upenn.edu/~bcpierce/unison/

答案 6 :(得分:2)

结帐scprsyncman scp man rsync

scp file1 file2 dir3 user@remotehost:path

答案 7 :(得分:2)

使用rsync,以便在连接中断时继续。如果有什么变化,你也可以更快地复制它们!

Rsync与SSH配合使用,因此您的复制操作是安全的。

答案 8 :(得分:2)

我使用了rdiffbackup http://www.nongnu.org/rdiff-backup/index.html,因为它可以满足您的所有需求而无需任何花哨的选项。它基于rsync算法。 如果您只需要复制一次,则可以稍后删除目标主机上的rdiff-backup-data目录。

rdiff-backup user1@host1::/source-dir user2@host2::/dest-dir

来自doc:

  rdiff-backup也保留了   子目录,硬链接,开发文件,   权限,uid / gid所有权,   修改时间,延长   属性,acls和资源分支。

这是对scp -p提案的奖励,因为-p选项不能保留所有内容(例如,目录上的权限设置不当)

在ubuntu上安装:

sudo apt-get install rdiff-backup

答案 9 :(得分:1)

好吧,快速回答会看一下'scp'手册页,或者可能是rsync - 完全取决于你需要复制的内容。如果你不得不这样做,你甚至可以使用tar-over-ssh:

tar cvf - | ssh server tar xf -

答案 10 :(得分:1)

我想你可以试试:

rsync -azvu -e ssh user@host1:/directory/ user@host2:/directory2/

(我假设你在host0上,你想直接从host1复制到host2)

如果上述方法不起作用,您可以尝试:

ssh user@host1 "/usr/bin/rsync -azvu -e ssh /directory/ user@host2:/directory2/"
如果您已经从host1到host2设置了无密码SSH登录,那么它会起作用

答案 11 :(得分:1)

scp将完成这项工作,但有一个问题:与第二个远程目标的连接将使用第一个远程目标上的配置,因此如果您在本地环境中使用.ssh / config,并且您希望rsa和要使用dsa密钥,您必须将代理转发到第一个远程主机。

答案 12 :(得分:0)

理想情况下,作为非root用户:

scp -r src $ host:$ path

如果你已经在$ host上有一些内容,请考虑使用rsync和ssh作为隧道。

/阿伦

答案 13 :(得分:0)

如果你真的想要一个精确的副本,你可能还想使用-p开关来scp,如果你正在使用它。我发现scp 从设备读取,我遇到了cpio问题,所以我个人总是使用 tar ,如下所示:

cd /origin; find . -xdev -depth -not -path ./lost+found -print0 \
| tar --create --atime-preserve=system --null --files-from=- --format=posix \
--no-recursion --sparse | ssh targethost 'cd /target; tar --extract \
--overwrite --preserve-permissions --sparse'

我将这个咒语保存在一个文件中,其中包含各种其他复制文件的方法。这个用于通过SSH进行复制;其他的是复制到压缩存档,在同一台计算机上复制,以及在SSH太慢时复制未加密的TCP套接字。

答案 14 :(得分:0)

如上所述,scp通常是最好的方法,但是不要忘记远程目录规范中的冒号,否则你将获得本地机器上的源目录副本。

答案 15 :(得分:0)

我喜欢通过ssh管道tar。

tar cf - [目录] | ssh [username] @ [hostname] tar xf - -C [远程盒子上的目的地]

此方法为您提供了许多选项。由于您要以root用户身份禁用复制多个用户帐户的文件很困难,因为您以普通用户身份登录远程服务器。为了解决这个问题,你可以在远程盒子上创建一个tar文件,它仍保留所有权。

tar cf - [目录] | ssh [username] @ [hostname]“cat&gt; output.tar”

对于慢速连接,您可以添加压缩,z为gzip或j为bzip2。

tar cjf - [目录] | ssh [username] @ [hostname]“cat&gt; output.tar.bz2”

tar czf - [目录] | ssh [username] @ [hostname]“cat&gt; output.tar.gz”

tar czf - [目录] | ssh [username] @ [hostname] tar xzf - -C [远程盒子上的目的地]