远程 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/to
Reference1Reference2
【参考方案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 服务器目录复制。如何? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章