Linux 使用scp命令远程传输文件夹

本文详细解析了SCP命令在文件传输过程中的正确使用方法,并通过实例演示如何修正常见的命令错误。

网上查到的命令是

scp -r root@192.168.1.104:/usr/local/nginx/html/webs/diff 

但是执行时提示

usage: scp [-12346BCpqrv] [-c cipher] [-F ssh_config] [-i identity_file]
           [-l limit] [-o ssh_option] [-P port] [-S program]
           [[user@]host1:]file1 ... [[user@]host2:]file2

 说明只指定了源文件,没有指定目标文件夹。由于是传到本地,所以不用添加服务器用户名和ip地址只用指定存储的文件夹就行

完整命令如下:

scp -r root@192.168.1.104:/usr/local/nginx/html/webs/diff /usr/local/nginx/temp_file

参考:https://www.cnblogs.com/no7dw/archive/2012/07/07/2580307.html

<think>我们正在讨论的是使用scp命令远程服务器复制文件夹到本地。根据引用[1]和引用[2],我们可以得到两种常用的命令格式。 引用[1]提到:将本地文件夹拷贝到远程服务器的命令,但我们需要的是反向操作(从远程复制到本地)。引用[2]则明确给出了从远程复制整个文件夹下的文件到本地的命令。 从引用[2]中提取的命令格式如下: ```bash scp -P [远程端口号] -r [远程用户名]@[远程服务器IP]:[远程要备份的文件夹] [本地文件夹路径] ``` 注意: - `-P` 指定端口号(注意是大写P),如果远程服务器使用默认端口22,则可以省略。 - `-r` 表示递归复制整个文件夹。 - 远程路径的格式为:`[用户名]@[服务器IP或主机名]:[远程文件夹路径]` - 本地文件夹路径:指定本地存放的目录。 另外,引用[3]也指出,scp命令需要从本地工作站运行,它通过建立自己的连接来传输文件。 因此,从远程服务器复制文件夹到本地的通用命令为: ### 1. **基本命令格式(使用默认端口22)** ```bash scp -r [远程用户名]@[远程服务器IP]:[远程文件夹路径] [本地存放路径] ``` 示例:将远程服务器上`/home/user/data`文件夹复制到本地的`/local/path`目录 ```bash scp -r user@192.168.1.100:/home/user/data /local/path ``` ### 2. **指定端口号(如果远程服务器SSH端口不是默认的22)** ```bash scp -P [端口号] -r [远程用户名]@[远程服务器IP]:[远程文件夹路径] [本地存放路径] ``` 示例:远程服务器SSH端口为31551,将远程文件夹`/Server/ResultData`复制到本地的`D:/Local/Resultdata/`(注意:在Linux本地路径使用正斜杠,Windows路径可能需要调整) ```bash scp -P 31551 -r root@10.218.13.165:/Server/ResultData /mnt/d/Local/Resultdata ``` 注意:如果本地是Windows系统,在命令提示符(cmd)或PowerShell中使用,路径可以使用反斜杠,但通常使用正斜杠也可以。如果路径包含空格,需要用引号括起来。 ### 3. **注意事项** - **权限问题**:确保你有权限访问远程文件夹和本地目标路径。 - **路径格式**:远程路径中如果包含空格或特殊字符,需要用引号括起来(例如:`"/path/with space"`)。 - **目标路径**:本地存放路径如果不存在,scp不会自动创建,需要先确保目录存在。 - **连接问题**:如果使用密钥认证,可能需要通过`-i`选项指定私钥文件(例如:`scp -i ~/.ssh/id_rsa ...`)。 ### 4. **使用密钥认证(无密码)** 如果设置了SSH密钥认证,可以省略密码输入: ```bash scp -i [私钥文件路径] -r [用户名]@[服务器IP]:[远程路径] [本地路径] ``` 示例: ```bash scp -i ~/.ssh/mykey.pem -r user@192.168.1.100:/remote/dir /local/dir ``` ### 5. **复制单个文件(不需要`-r`)** 如果只需要复制文件(而不是文件夹),可以去掉`-r`选项: ```bash scp user@192.168.1.100:/remote/file.txt /local/path/ ``` ### 总结 从远程服务器复制整个文件夹到本地的核心命令是: ```bash scp -r [用户名]@[服务器IP]:[远程文件夹] [本地路径] ``` 如果端口不是默认的22,则添加`-P [端口号]`(注意是大写P)。 根据引用[2]的示例,我们还可以使用通配符复制文件夹内的所有文件(但不包括文件夹本身),但通常我们使用`-r`递归复制整个文件夹及其子目录。 请根据实际情况替换命令中的参数。 §§相关问题§§ 1. 使用scp复制文件夹时如何显示进度? 2. 如何通过scp在复制过程中限制带宽? 3. 除了scp,还有哪些安全的文件传输工具(如rsync)?</think>### 使用 SCP远程服务器复制文件夹到本地的命令 根据引用内容,使用 SCP远程服务器复制文件夹到本地的核心命令格式如下: ```bash scp -P [端口号] -r [远程用户名]@[远程服务器IP]:[远程文件夹路径] [本地保存路径] ``` #### 详细参数说明: 1. **`-P`**:指定远程服务器的 SSH 端口号(**大写 P**) - 默认 SSH 端口为 22 时可省略 - 示例:`-P 31551`(引用[2]) 2. **`-r`**:递归复制整个文件夹(必需参数) - 表示复制目录及其所有子内容 3. **远程路径格式**: `用户名@服务器IP:文件夹路径` - 示例:`root@10.218.13.165:/Server/ResultData/`(引用[2]) 4. **本地路径**: 本地保存目录的绝对路径或相对路径 --- ### 具体操作示例 #### 示例 1:使用默认端口 (22) ```bash scp -r user@203.0.113.10:/remote/data /local/path/ ``` - 将远程服务器 `203.0.113.10` 上 `/remote/data` 文件夹复制到本地的 `/local/path` 目录 - 默认使用 22 端口,无需 `-P` 参数 #### 示例 2:指定自定义端口(引用[2]) ```bash scp -P 31551 -r root@10.218.13.165:/Server/ResultData/ ~/Desktop/Backup/ ``` - 端口 `31551` - 远程路径:`/Server/ResultData/` - 保存到本地桌面 `Backup` 文件夹 #### 示例 3:复制文件夹内容(非文件夹本身) ```bash scp -P 2222 -r admin@example.com:/var/logs/* ./logs_backup/ ``` - 复制远程 `/var/logs/` 目录下所有文件到本地 `logs_backup` 文件夹 - 使用通配符 `*` 复制内容但不包含父文件夹 --- ### ⚠️ 注意事项 1. **路径格式**: - 远程路径使用绝对路径(以 `/` 开头) - 本地路径若含空格,需加引号:`"/path/with space"` 2. **认证方式**: - 首次连接需确认主机密钥(输入 `yes`) - 使用密钥认证更安全(添加 `-i /path/to/key.pem`) 3. **网络要求**: - 本地需能访问远程服务器的 SSH 端口 - 大文件传输建议用 `rsync`(支持断点续传) 4. **权限问题**: - 确保远程用户有读取权限 - 本地目录需有写入权限 > 引用[3]强调:SCP 命令需在**本地终端执行**,它会建立独立于 SSH 的新连接传输文件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值