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

Slasengger 2562 shell command-line scp copy

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

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

怎么做到这一点?

Gryphius.. 4684

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

来自man scp(见在线手册)

-r递归复制整个目录

  • 我每次都用谷歌搜索。相关漫画:https://xkcd.com/1168/ (1304认同)
  • 使用-p来保存文件修改时间,权限等!scp -pr user @ ... (72认同)
  • 这个答案缺乏重要的解释.你最终会得到`Desktop/foo`还是你有桌面/所有内容.FooGohere`scp似乎有时对我来说很奇怪它有一件事然后另一件事 (22认同)
  • 我发现了两个很不错的知识:-C标志增加了压缩,而-c标志使您可以传入其他密码类型以获得更好的性能,例如scp -c blowfish a @ b:something。见dimuthu的答案](http://stackoverflow.com/a/24256706/741850) (8认同)
  • @ john-k,许多可能的原因(服务器上未启用scp,未授权公共密钥,文件许可权问题,...)。首先检查标准ssh是否与您的密钥一起使用。咨询关于sof / serverfault的该主题的现有问题,如果仍无济于事,请使用ssh / scp的debug输出在serverfault上询问一个新问题。 (4认同)
  • @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 /`,您将最终获得`Desktop`中的`foo`的内容以及散布在`Desktop`下的`foo`的所有子目录。 (4认同)
  • 例如(通常在shell脚本中使用):`su myuser -c“ scp -r /var/www/myapp.org/uploads root @ $ jcrdevip:/var/www/mydevapp.com/uploads”`将复制内容从上传到上传。`scp -r /var/www/myapp.org/uploads root @ $ jcrdevip:/ var / www / mydevapp.com / uploads`似乎会将上传的文件夹复制到`mydevapp.com / uploads`文件夹中,从而创建了不需要的子文件夹 (2认同)

Alexander Ya.. 298

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

  1. 公钥授权
  2. 创建ssh别名

然后,例如,如果你有〜/ .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.有关更多信息,请参阅相关问题

如何在使用scp时为远程路径启用自动完成功能?
SCP文件名标签完成

  • @ b.long问题是"如何将远程文件夹foo复制到本地桌面".我的回答是__"scp -r prod:/ path/foo/home/user/Desktop"__.希望你能看到关系. (13认同)
  • 不知道配置文件,这真棒! (11认同)
  • @Bernhard对我来说显而易见,因为我正在使用bash-shell.谢谢你指点我!答案已更新. (2认同)

Shiv Singh.. 199

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

scp -r /path/from/destination username@hostname:/path/to/destination

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

scp -r username@hostname:/path/from/destination /path/to/destination

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

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

将当前目录从远程复制到本地

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

救命:

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

注意:由于防火墙中不允许使用端口,有时自定义端口将无法工作,因此请确保防火墙中允许使用自定义端口进行传入和传出连接


Manish Shriv.. 47

我一直用的是:

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

.(点):这意味着current folder.所以从服务器复制并粘贴到此处.

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

  • 谢谢你指出`.`指的是当前目录! (8认同)

justi.. 28

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

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 .`. (10认同)
  • 这让我想起@cptloop发表的评论!:D https://xkcd.com/1168/ (4认同)

dimuthu.. 21

如果您有一个可以从远程位置下载的文件,如果您不太关心安全性,请尝试将scp默认加密(Triple-DES)更改为"blowfish".

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

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

  • 根据[本博客文章](https://bbs.archlinux.org/viewtopic.php?id=9107),使用`arcfour`代替`blowfish`可以获得更好的性能,但它有安全漏洞. (2认同)

小智.. 19

转到统一工具栏上的文件

在此输入图像描述

按Ctrl + l并写入here_goes_your_user_name@192.168.10.123

192.168.1.103是您要连接的主机.

这里有一个例子

在此输入图像描述


Arun G.. 18

典型情况,

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


kaiser.. 12

如果您遇到"身份验证失败太多",请指定已添加到服务器ssh服务器的确切SSH密钥:

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


Fulvio.. 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?.


Salem.. 5

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

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