【问题标题】:How do I copy a folder from remote to local using scp?如何使用 scp 将文件夹从远程复制到本地?
【发布时间】:2012-07-03 12:42:52
【问题描述】:

如何使用scp 将文件夹从远程复制到本地主机?

我使用ssh 登录我的服务器。
然后,我想将远程文件夹foo复制到本地/home/user/Desktop

我如何做到这一点?

【问题讨论】:

  • OP 的问题是是否可以将文件从远程复制到本地主机同时 ssh'd 到远程主机。我不确定为什么没有一个答案能正确解决他/她的问题。
  • 问题前提不正确。这个想法是,一旦登录到 ssh,如何将文件从登录的机器移回登录的客户端。但是,scp 不知道也不能使用 ssh 连接。它正在建立自己的联系。所以简单的解决方案是在本地工作站上创建一个新的终端窗口,然后运行 ​​scp 将文件从远程服务器传输到本地机器。例如,scp -i key user@remote:/remote-dir/remote-file /local-dir/local-file
  • 使用mcTABcd sh://USER@HOST,使用mc快捷键,完成后cd退出。

标签: shell ssh command-line copy scp


【解决方案1】:
scp -r user@your.server.example.com:/path/to/foo /home/user/Desktop/

通过不包括 foo 末尾的尾随“/”,您将复制目录本身(包括内容),而不仅仅是目录的内容。

来自man scp(见online manual

-r 递归复制整个目录

【讨论】:

  • 我每次都用谷歌搜索。相关漫画:xkcd.com/1168
  • 我发现了两个很好的知识:-C 标志添加了压缩,-c 标志允许您传递其他密码类型以获得更好的性能,例如 scp -c blowfish a@b:something . as seen in dimuthu's answer跨度>
  • 使用 -p 保留文件修改时间、权限等! scp -pr user@...
  • 这个答案缺乏重要的解释。你最终会得到Desktop/foo 还是Desktop/allcontentsofFooGohere scp 有时对我来说似乎很奇怪,它做一件事然后另一件事
  • @Toskan 和scp -r user@your.server.example.com:/path/to/foo /home/user/Desktop/ 你应该以Desktop/foo 结束。使用scp -r user@your.server.example.com:/path/to/foo/. /home/user/Desktop/,您最终将得到Desktopfoo 的内容以及foo 的所有子目录散布在Desktop
【解决方案2】:

要使用 scp 的全部功能,您需要执行以下步骤:

  1. Public key authorisation
  2. Create ssh aliases

然后,例如,如果你有这个 ~/.ssh/config

Host test
    User testuser
    HostName test-site.com
    Port 22022

Host prod
    User produser
    HostName production-site.com
    Port 22022

您将避免输入密码并简化 scp 语法,如下所示:

scp -r prod:/path/foo /home/user/Desktop   # copy to local
scp -r prod:/path/foo test:/tmp            # copy from remote prod to remote test

此外,您将能够使用远程路径完成:

scp test:/var/log/  # press tab twice
Display all 151 possibilities? (y or n)

更新:

要启用远程 bash-completion,您需要在 <source><target> 主机上安装 bash-shell,并且 bash-completion 正常工作。有关更多信息,请参阅相关问题:

How to enable autocompletion for remote paths when using scp?
SCP filename tab completion

【讨论】:

  • 不知道配置文件,这太棒了!
  • 制表符补全是废话,对我来说只是从本地主机完成。
  • @b.long 问题是“如何将远程文件夹 foo 复制到本地桌面”。我的答案是“scp -r prod:/path/foo /home/user/Desktop”。希望你能看到关系。
  • @Bernhard 对我来说很明显,因为我使用的是 bash-shell。谢谢你指点我!答案已更新。
  • @Alexander Yancharuk :感谢您的回答,这比仅涵盖语法更详细。
【解决方案3】:

将所有本地位置复制到远程位置(上传)

scp -r /path/from/local username@hostname:/path/to/remote

将所有远程位置复制到本地位置(下载)

scp -r username@hostname:/path/from/remote /path/to/local

自定义端口,其中xxxx自定义端口编号

 scp -r -P xxxx username@hostname:/path/from/remote /path/to/local

远程复制到当前目录

scp -r username@hostname:/path/from/remote .

帮助:

  1. -r递归复制所有目录和文件
  2. 始终使用来自/ 的完整位置,通过pwd 获取完整位置
  3. scp 将替换所有现有文件
  4. hostname 将是主机名或 IP 地址
  5. 如果需要自定义端口(除了端口 22),请使用-P portnumber
  6. 。 (点) - 表示当前工作目录,因此请从服务器下载/复制并粘贴到此处。

注意:有时自定义端口会因为防火墙不允许的端口而无法工作,所以请确保自定义端口在防火墙中允许用于传入和传出连接

【讨论】:

  • 似乎(至少在最新版本的 Raspbian Jessie 和 Ubuntu 中)scp 使用 -P(大写 P)作为端口,而(奇怪的是)ssh 使用 -p(小写)。
  • -p 保留用于保留“原始文件的修改时间、访问时间和模式”。因此,如果您将其用于端口,它可能无法正常工作 ;-) 除非您有不同的版本以不同方式使用小写 p。
  • 使用 ssh,是的。不是 scp (我假设)。
  • 目录有空格应该放什么?
  • @hyprfrcb 使用pwd 获取位置并使用相同
【解决方案4】:

我经常使用的是:

scp -r username@IP:/path/to/server/source/folder/  .

。 (点):表示current folder。所以只能从服务器复制并粘贴到这里。

IP : 可以是125.55.41.311 之类的IP 地址,也可以是ns1.mysite.com 之类的主机。

【讨论】:

  • 感谢您指出. 指的是当前目录!
【解决方案5】:

最好先在远程服务器上压缩目录:

tar czfP backup.tar.gz /path/to/catalog

其次,远程下载:

scp user@your.server.example.com:/path/to/backup.tar.gz .

最后,解压文件:

tar -xzvf backup.tar.gz

【讨论】:

  • “更好”在很大程度上取决于您正在传输的数据以及通过 ssh 到服务器进行压缩/解压缩的工作量。并且:您可以使用 -C 标志向 scp 添加压缩,例如 scp -C a@b:bigfile .
  • 这让我想起了@cptloop 的评论! :D xkcd.com/1168
  • 你为我节省了一次额外的谷歌搜索。
【解决方案6】:

典型场景,

scp -r -P port username@ip:/path-to-folder  .

举例说明,

scp -r -P 27000 abc@10.70.12.12:/tmp/hotel_dump .

在哪里,

port = 27000
username = "abc" , remote server username
path-to-folder = tmp/hotel_dump
. = current local directory

【讨论】:

  • 感谢您的回答。特定 SSH 端口的 -P 对我很有帮助。
【解决方案7】:

如果您要从远程位置下载大量文件,并且不太关心安全性,请尝试将 scp 默认加密 (Triple-DES) 更改为“blowfish”。

这将大大减少文件复制时间。

scp -c blowfish -r user@your.server.example.com:/path/to/foo /home/user/Desktop/

【讨论】:

  • 根据this blog post,使用arcfour 代替blowfish 可以获得更好的性能,但它存在安全漏洞。
【解决方案8】:

转到统一工具栏上的文件

按 Ctrl + l 并写 here_goes_your_user_name@192.168.10.123

192.168.1.103 是您要连接的主机。

这里有一个例子

【讨论】:

    【解决方案9】:

    如果您遇到“身份验证失败次数过多”,请指定您添加到服务器 ssh 服务器的确切 SSH 密钥:

    scp -r -i /path/to/local/key user@remote.tld:/path/to/folder /your/local/target/dir
    

    【讨论】:

      【解决方案10】:

      问题是如何使用scp 命令将文件夹从远程复制到本地。

      $ scp -r userRemote@remoteIp:/path/remoteDir /path/localDir

      但这是使用sftp 的更好方法 - SSH 文件传输协议(也称为安全文件传输协议,或 SFTP)是一种网络协议,可对任何可靠数据提供文件访问、文件传输和文件管理流。(维基百科)。

      $ sftp user_remote@remote_ip

      sftp> cd /path/to/remoteDir

      sftp> get -r remoteDir

      Fetching /path/to/remoteDir to localDir 100% 398 0.4KB/s 00:00

      如需有关sftp 命令的帮助,只需键入help?

      【讨论】:

        【解决方案11】:

        我不知道为什么,但我不得不在源服务器指令之前使用本地文件夹。让它发挥作用

        scp -r . root@888.888.888.888:/usr/share/nginx/www/example.org/
        

        【讨论】:

        • 假设用户有权限,你能不使用root@做一个绝对路径吗
        【解决方案12】:

        对于 Windows 操作系统,我们使用此命令。

        pscp -r -P 22 hostname@IP:/path/to/Downloads   ./
        

        【讨论】:

          猜你喜欢
          • 2017-06-03
          • 2012-02-17
          • 2014-02-24
          • 2013-08-13
          • 2013-11-25
          • 2014-11-09
          • 2021-10-22
          • 2016-05-23
          • 2013-02-12
          相关资源
          最近更新 更多