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

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

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

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

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

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

阅读每个命令的手册页,如果你想了解更多关于它们如何工作的细节。

我会修改以前build议的答复:

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

如下:

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

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

你还必须小心斜线。 你可能想要

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

如果希望源“文件夹”的内容出现在目标“dfolder”中。 如果没有结尾的斜杠,将在目标“dfolder”中创build一个“sfolder”子目录。

rsync -avlzp / path / to /文件夹name@remote.server:/ path / to / remote /文件夹

login到一台机器

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

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

如果任务重复发生,请尝试一致。 http://www.cis.upenn.edu/~bcpierce/unison/

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

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

我使用rdiffbackup http://www.nongnu.org/rdiff-backup/index.html因为它没有任何花哨的select所需要的一切。; 它基于rsyncalgorithm。 如果您只需复制一次,则可以稍后删除目标主机上的rdiff-backup-data目录。

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

来自doc:

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

这是scp -pbuild议的一个好处,因为-p选项并不能保留所有的(例如,对目录的权限设置不好)

安装在Ubuntu上:

 sudo apt-get install rdiff-backup 

签出scp或rsync , man scp man rsync

 scp file1 file2 dir3 user@remotehost:path 

那么,快速回答将看看'scp'manpage,或者rsync – 完全取决于你需要复制什么。 如果你不得不,你甚至可以做tar-over-ssh:

 tar cvf - | ssh server tar xf - 

我想你可以尝试一下:

 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的无密码的SSHlogin,

作为非root用户的理想select:

scp -r src $ host:$ path

如果你已经有一些$ host的内容,可以考虑使用带ssh的rsync作为隧道。

/艾伦

如果你真的想要一个精确的副本,你可能也想使用-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太慢时通过一个未encryption的TCP套接字进行复制。

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

我喜欢通过ssh来pipe理tar。

tar cf – [directory] ​​| ssh [用户名] @ [主机名] tar xf – -C [远程机器上的目的地]

这种方法给你很多select。 既然你应该有根ssh禁用复制文件的多个用户帐户是很难的,因为你是作为一个普通的用户login到远程服务器。 为了解决这个问题,你可以在远程盒子上创build一个tar文件,这个文件仍然保留所有权。

tar cf – [directory] ​​| ssh [用户名] @ [主机名]“cat> output.tar”

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

tar cjf – [directory] ​​| ssh [用户名] @ [主机名]“cat> output.tar.bz2”

tar czf – [directory] ​​| ssh [用户名] @ [主机名]“cat> output.tar.gz”

tar czf – [directory] ​​| ssh [用户名] @ [主机名] tar xzf – -C [远程机器上的目的地]

scp会完成这个工作,但是有一个问题:到第二个远程目标的连接将使用第一个远程目标的configuration,所以如果你在本地环境中使用.ssh / config,并且你期望rsa和dsa键工作,你必须转发你的代理到第一个远程主机。

Interesting Posts