远程 Linux 服务器到远程 linux 服务器目录复制。如何? [关闭]

Posted

技术标签:

【中文标题】远程 Linux 服务器到远程 linux 服务器目录复制。如何? [关闭]【英文标题】:Remote Linux server to remote linux server dir copy. How? [closed] 【发布时间】:2010-09-09 07:46:44 【问题描述】:

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

【问题讨论】:

如果你有远程服务器的ftp访问权限,我们也可以使用wget下载,如$wget -r --level=9 --no-parent --reject "index.html*" ftp://<USERID>:<PASSWORD>@<MACHINE-NAME>/path/toReference1Reference2 【参考方案1】:

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

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

或者,更健壮和更快(在传输速度方面)的方法:

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

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

【讨论】:

添加 -L 以跟随符号链接并将它们复制为常规目录。这个链接有很多有用的例子:tecmint.com/rsync-local-remote-file-synchronization-commands【参考方案2】:

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

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

【讨论】:

这个答案值得更多的支持,应该被接受。如果你喜欢的话,唯一要添加的是--progress【参考方案3】:

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

【讨论】:

【参考方案4】:
scp -r <directory> <username>@<targethost>:<targetdir>

【讨论】:

【参考方案5】:

登录一台机器

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

【讨论】:

【参考方案6】:

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

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

【讨论】:

【参考方案7】:

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

【讨论】:

【参考方案8】:

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

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

来自文档:

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

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

在 ubuntu 上安装:

sudo apt-get install rdiff-backup

【讨论】:

【参考方案9】:

查看scp 或rsync, man scp man rsync

scp file1 file2 dir3 user@remotehost:path

【讨论】:

【参考方案10】:

好吧,快速回答是看一下“scp”联机帮助页,或者可能是 rsync - 完全取决于您需要复制的内容。如果必须,您甚至可以使用 tar-over-ssh:

tar cvf - | ssh server tar xf -

【讨论】:

如果远端路径不同,则:(cd $path; tar xf -)【参考方案11】:

我想你可以试试:

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 登录,那么它会起作用

【讨论】:

Rsync 不能以这种方式工作。如果您尝试它,您会收到错误消息“源和目标不能都是远程的。”【参考方案12】:

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

【讨论】:

【参考方案13】:

最好是非root用户:

scp -r src $host:$path

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

/艾伦

【讨论】:

【参考方案14】:

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

【讨论】:

【参考方案15】:

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

【讨论】:

【参考方案16】:

我喜欢通过 ssh 传输 tar。

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

这种方法为您提供了很多选择。由于您应该以普通用户身份登录远程服务器,因此您应该禁用 root ssh 为多个用户帐户复制文件是困难的。为了解决这个问题,您可以在仍然保留所有权的远程机器上创建一个 tar 文件。

tar cf - [目录] | ssh [用户名]@[主机名] "cat > output.tar"

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

tar cjf - [目录] | ssh [用户名]@[主机名] "cat > output.tar.bz2"

tar czf - [目录] | ssh [用户名]@[主机名] "cat > output.tar.gz"

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

【讨论】:

以上是关于远程 Linux 服务器到远程 linux 服务器目录复制。如何? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

linuxwindows登录到远程linux服务器

如何远程复制另一台Linux服务器

Linux服务器之间复制文件命令scp

Linux服务器之间复制文件命令scp.md

Linux 远程登录

Linux 远程登录