远程Linux服务器到远程Linux服务器目录副本。怎么用?

远程Linux服务器到远程Linux服务器目录副本。怎么用?,linux,data-transfer,Linux,Data Transfer,将目录(包含子目录和文件)从一个远程Linux服务器复制到另一个远程Linux服务器的最佳方法是什么?我已经使用SSH客户端(比如Putty)连接了这两个。我有两个的root访问权限 rsync-avlzp/path/to/foldername@remote.server:/path/to/remote/folder签出或, man scp man rsync scp file1 file2 dir3 user@remotehost:path 使用rsync以便在连接中断时可以继续。如果有什么

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

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

签出或,
man scp
man rsync

scp file1 file2 dir3 user@remotehost:path

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

Rsync与SSH一起工作,因此您的复制操作是安全的。

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

好吧,快速的答案是看一下“scp”手册页,或者rsync,这完全取决于您需要复制的内容。如果必须这样做,您甚至可以通过ssh执行tar:

tar cvf - | ssh server tar xf -
登录到一台计算机

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


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

scp-r src$host:$path

如果您已经在$宿主上考虑了一些内容,请使用SSH作为RSoC作为隧道。


/Allan

我通常有两种方法来实现这一点,都使用ssh:

scp -r sourcedir/ user@dest.com:/dest/dir/
或者,更稳健、更快(就传输速度而言)的方法:


如果您想了解每个命令工作原理的更多详细信息,请阅读每个命令的手册页。

如果任务重复执行,请尝试unison。

我想你可以试试:

rsync -azvu -e ssh user@host1:/directory/ user@host2:/directory2/
(我假设您在主机0上,并且希望直接从主机1复制到主机2)

如果上述方法无效,您可以尝试:

ssh user@host1 "/usr/bin/rsync -azvu -e ssh /directory/ user@host2:/directory2/"
在这种情况下,如果您已经设置了从主机1到主机2的无密码SSH登录,那么它就可以工作了。我使用了rdiffbackup,因为它可以满足您的所有需要,而无需任何特别的选项。它基于rsync算法。 如果只需要复制一次,可以稍后删除目标主机上的rdiff备份数据目录

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

rdiff备份还保留 子目录、硬链接、开发文件、, 权限、uid/gid所有权、, 修改时间,延长 属性、ACL和资源分叉

这是scp-p提案的一个额外好处,因为-p选项不能保留所有内容(例如,目录上的权限设置不正确)

在ubuntu上安装:

sudo apt-get install rdiff-backup

如果你真的想要一个精确的拷贝,你可能还想使用-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套接字进行复制。

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

我喜欢通过ssh传输tar

tar cf-[directory]| ssh[username]@[hostname]tar xf--C[destination on remote box]

这个方法给你很多选择。因为您应该禁用root ssh,所以很难为多个用户帐户复制文件,因为您是作为普通用户登录到远程服务器的。要解决这个问题,您可以在远程框上创建一个tar文件,该文件仍然保留所有权

tar cf-[directory]| ssh[username]@[hostname]“cat>output.tar”

对于慢速连接,可以添加压缩,z表示gzip,j表示bzip2

tar cjf-[directory]| ssh[username]@[hostname]“cat>output.tar.bz2”

tar czf-[directory]| ssh[username]@[hostname]“cat>output.tar.gz”


tar czf-[directory]| ssh[username]@[hostname]tar xzf--C[destination on remote box]

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

我将修改以前建议的答复:

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”子目录。

如果远程端的路径不同,则:(cd$path;tar xf-)添加
-L
以跟踪符号链接并将其作为常规目录复制。这个链接有很多有用的例子:如果你可以访问远程服务器的ftp,我们也可以使用wget下载,比如
$wget-r--level=9--no parent--reject“index.html*”ftp://:@/path/to
,这个答案值得更多的投票,应该是被接受的。如果您喜欢,唯一要添加的是
--progress
。Rsync不是这样工作的。如果您尝试,您会收到错误消息“源和目标不能都是远程的。”
rsync -aHvz /path/to/sfolder/ name@remote.server:/path/to/remote/dfolder