远程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键工作,你必须转发你的代理到第一个远程主机。