将目录(带有子目录和文件)从一个远程Linux服务器复制到另一个远程Linux服务器的最佳方法是什么?我已使用SSH客户端(如Putty)连接到两者。我有两个root访问权限。
答案 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)
答案 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)
答案 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 [远程盒子上的目的地]