【问题标题】:Copying files using rsync from remote server to local machine使用 rsync 将文件从远程服务器复制到本地计算机
【发布时间】:2012-02-23 20:06:15
【问题描述】:

一旦我通过 ssh 连接到我的远程服务器,将所有文件从一个目录复制到我机器上的本地目录的命令是什么?

【问题讨论】:

  • 因为你可以直接在本地机器上rsync
  • 哦...是的,我可以。我现在看到了其他答案。谢谢。
  • 这是(网络)开发的常见任务,有一个很好的答案。我不明白为什么它仍然关闭。
  • 我认为@d.raev 指的是问题已关闭为题外话(如果我没记错的话,我将这个问题标记为已迁移 到超级用户,我认为它更适合)而不是没有没有接受的答案。仍然......很高兴我的答案在这么久之后被接受了。 :-)
  • @markstewie 没有不好的感觉,这是一个很好的问题,它帮助了我(似乎也有很多其他人),但是这种“封闭”让它看起来不值得信任,所以我想引起一些关注。

标签: ssh rsync


【解决方案1】:

从您的本地计算机:

rsync -chavzP --stats user@remote.host:/path/to/copy /path/to/local/storage

从您的本地计算机使用非标准 ssh 端口:

rsync -chavzP -e "ssh -p $portNumber" user@remote.host:/path/to/copy /local/path

或者从远程主机,假设你真的想以这种方式工作并且你的本地机器正在监听 SSH:

rsync -chavzP --stats /path/to/copy user@host.remoted.from:/path/to/local/storage

请参阅man rsync 了解我常用的开关。

【讨论】:

  • 命令说明:explainshell.com/…
  • 哇,explainshell 网站太棒了。
  • @cmcdragonkai:确实,本地主机必须运行 ssh 服务器并且远程主机可以访问。这是我更喜欢第一种解决方案而不是第二种解决方案的原因之一。
  • 使用斜杠进行 rsync 时要小心。 Johnnysweb 给出的命令将在/path/to/local/storage 内创建一个名为copy 的目录。就像这样/path/to/local/storage/copy。如果那是你想要的,那就太好了。然而,更常见的情况是您希望将远程目录的内容复制到本地目录中。然后您将执行/path/to/copy/,这会将内容放在目录/path/to/local/storage 中,而无需创建本地副本目录。
  • 我来这里是为了一个 rsync 命令,我得到了explainshell.com。谢谢@beefsack!
【解决方案2】:

如果你有 SSH 访问权限,则不需要先 SSH 再复制,只需从目的地使用Secure Copy (SCP)

scp user@host:/path/file /localpath/file

支持通配符,所以

scp user@host:/path/folder/* /localpath/folder

将复制该文件夹中的所有远程文件。如果复制多个目录。

note -r 也会复制所有子文件夹和内容。

【讨论】:

  • 为什么使用scp 而不是rsync?另外,请注意您的 shell 不会尝试扩展 user@host:/path/folder/*,可能使用单引号 (')。
  • 我知道scp 是什么,这不是我的问题。你为什么不用rsync?这就是问题所要求的,不需要建立 SSH 会话 并且 通常比 scp 更快、更有效。
  • 记住,scp 遵循符号链接而不是复制它们。这可能导致复制超出您的预期并丢失符号链接(它们成为普通文件夹/文件)。
  • Mondane 的回应正是我找到这篇文章的原因。通常,我对所有内容都使用 scp,但我需要保留从服务器到服务器的权限和符号链接。此外,速度差异(我的新手自己肯定是第一个)是巨大的。
  • 另外 rsync 比 scp 快很多。
【解决方案3】:

我认为最好从本地计算机复制文件,因为如果文件数量或文件大小非常大,如果当前 ssh 会话丢失(管道损坏或其他原因),复制过程可能会中断。

如果您已配置 ssh 密钥以连接到远程服务器,则可以使用以下命令:

rsync -avP -e "ssh -i /home/local_user/ssh/key_to_access_remote_server.pem" remote_user@remote_host.ip:/home/remote_user/file.gz /home/local_user/Downloads/

其中v 选项为--verbosea 选项为--archive - 存档模式,P 选项与--partial 相同- 保留部分传输的文件,e 选项为--rsh=COMMAND - 指定要使用的远程 shell。

rsync man page

【讨论】: