当前位置:首页> 正文

关于数据传输:远程Linux服务器到远程linux服务器目录复制。 怎么样?

关于数据传输:远程Linux服务器到远程linux服务器目录复制。 怎么样?

Remote Linux server to remote linux server dir copy. How?

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


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

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

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

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

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


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

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

如下:

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

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

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

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

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


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


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

登录一台机器

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


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


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

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

来自文档:

rdiff-backup also preserves
subdirectories, hard links, dev files,
permissions, uid/gid ownership,
modification times, extended
attributes, acls, and resource forks.

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

在ubuntu上安装:

1
sudo apt-get install rdiff-backup

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

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


查看scp或rsync,
man scp
man rsync

1
scp file1 file2 dir3 user@remotehost:path

我想你可以尝试:

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

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

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

1
ssh user@host1"/usr/bin/rsync -azvu -e ssh /directory/ user@host2:/directory2/"

如果你已经设置了从host1到host2的无密码SSH登录,它就可以工作了


那么,快速回答会看看'scp'手册页,或者可能是rsync - 完全取决于你需要复制的内容。如果必须,你甚至可以做tar-over-ssh:

1
tar cvf - | ssh server tar xf -


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


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

1
2
3
4
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 - [目录] | ssh [username] @ [hostname] tar xf - -C [远程盒子上的目的地]

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

tar cf - [目录] | ssh [username] @ [hostname]"cat> output.tar"

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

tar cjf - [目录] | ssh [username] @ [hostname]"cat> output.tar.bz2"

tar czf - [目录] | ssh [username] @ [hostname]"cat> output.tar.gz"

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


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

scp -r src $ host:$ path

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

/艾伦


展开全文阅读

相关内容