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


2693

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

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

我该如何实现?


61
OP的问题是,在ssh到远程主机时是否可以将文件从远程复制到本地主机。我不确定为什么没有一个答案能正确解决他/她的问题。
JeffDror

3
问题的前提是不正确的。这个想法是,一旦登录到ssh,如何将文件从已登录的计算机移回到已登录的客户端。但是,scp既不知道也不能使用ssh连接。它正在建立自己的联系。因此,简单的解决方案是在本地工作站上创建一个新的终端窗口,然后运行scp将文件从远程服务器传输到本地计算机。例如,scp -i key user @ remote:/ remote-dir / remote-file / local-dir / local-file
jeffmcneill

12
这个问题可能是题外话,但这也是Google上排名最高的帖子。锁定它意味着没有人可以对其进行更新以提供更好的解决方案。
亚历克斯·哈维

3
我最近问了一个有关SuperUser上另一种工具的命令行的类似的“更深入的问题”,该问题已被mods移至StackOverflow。无论如何,我都同意mods的观点:我们可以将其移交给SuperUser并解锁吗?
Nikhil VJ

3
通常,对stackoverflow的整个“脱位”反应是该平台的最大缺陷。狂热的马丁内斯。
AdamC

Answers:


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

通过在foo的末尾不包括结尾的“ /”,您将移动目录本身(包括内容),而不是仅移动目录的内容。

man scp(请参阅在线手册

-r递归复制整个目录


1407
我每次都用谷歌搜索。相关漫画:xkcd.com/1168
cptloop

10
我发现了两个很不错的知识:该-C标志增加了压缩,该-c标志使您可以传递其他密码类型以获得更好的性能,如scp -c blowfish a@b:something . dimuthu的答案所示
Automatico

79
使用-p保留文件修改时间,权限等!使用scp -pr用户@ ...
误码率

27
这个答案缺乏重要的解释。你将结束Desktop/foo,否则将有Desktop/allcontentsofFooGohereSCP似乎行事怪异,有时对我来说,做一件事情然后又
Toskan

7
scp -r user@your.server.example.com:/path/to/foo /home/user/Desktop/您在一起的@Toskan 应该以结尾Desktop/foo。与scp -r user@your.server.example.com:/path/to/foo/. /home/user/Desktop/ 您一起将结束fooin 的内容Desktop以及foo散落在其中的所有子目录Desktop
Ioannis

306

要使用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补全功能,您需要在主机<source><target>主机上均具有bash-shell ,并能正常使用bash补全功能。有关更多信息,请参见相关问题:

使用scp时如何为远程路径启用自动补全功能?
SCP文件名选项卡完成


12
不知道配置文件,太棒了!
dmastylo

制表符完成是胡说八道,只是对我来说是从本地主机完成的。
伯恩哈德2014年

14
@ b.long问题是“如何将远程文件夹foo复制到本地桌面”。我的答案是“ scp -r prod:/ path / foo / home / user / Desktop”。希望你能看到关系。
Alexander Yancharuk 2014年

2
@Bernhard对我来说很明显,因为我正在使用bash-shell。感谢您指出我的意思!答案已更新。
Alexander Yancharuk 2014年

1
@Alexander Yancharuk:感谢您的回答,这比仅涉及语法要详细得多。
角斗士2014年

216

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

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. 。(点) -表示当前的工作目录,因此只能从服务器下载/复制并粘贴到此处。

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


1
似乎(至少在Raspbian Jessie和Ubuntu的最新版本中)scp使用-P(大写P)作为端口,而(奇数)ssh使用-p(小写)。
亚当·普洛彻

-p保留用于保留“原始文件的修改时间,访问时间和模式”。因此,如果您将其用于端口,则可能不起作用;-)除非您使用的其他版本使用的小写字母p不同。
亚当·普洛彻

使用ssh,是的。不与SCP(我想)。
亚当·普洛彻

如果目录包含空格,该怎么办?
Brethlosze

@hyprfrcb pwd用于获取位置和使用位置
Shiv Singh

48

我一直使用的是:

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

。(点):表示current folder。因此,请从服务器复制并仅粘贴到此处。

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


9
感谢您指出指向.当前目录!
ericmjl

35

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

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

其次,从远程下载:

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

最后,解压缩文件:

tar -xzvf backup.tar.gz

10
“更好”在很大程度上取决于您要传输的数据以及将其SSH到服务器以进行压缩/解压缩的工作量。并且:您可以使用-C标记为scp添加压缩,例如scp -C a@b:bigfile .
Automatico

4
这让我想起了@cptloop的评论!:D xkcd.com/1168
GoodSp33d 2015年

22

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

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

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

2
根据这篇博客,你获得更好的性能,arcfour在代替blowfish,但它有安全漏洞。
Automatico

20

典型场景

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

感谢您的回答。-P用于特定的SSH端口对我有用。
重做

19

转到统一工具栏上的文件

在此处输入图片说明

按Ctrl + l并在此处输入_goes_your_user_name@192.168.10.123

192.168.1.103是您要连接的主机。

这里一个例子

在此处输入图片说明


12

问题是如何使用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?


12

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

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

5

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

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

1
假设用户具有权限,您能不用使用绝对路径吗root@
Jonathan
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.