用 scp 传本地目录到远程服务器需加 -r 参数实现递归复制,命令为 scp -r /本地/路径 用户名@ip:/远程/路径;末尾斜杠影响是否保留目录名,-p、-c、-p、-v 等选项可提升效率与可靠性,远程路径须存在且有写权限,建议用绝对路径并配置 ssh 密钥登录。

用 scp 把本地目录传到远程服务器,核心是加 -r 参数实现递归复制,命令结构清晰、操作直接。
基本命令格式
scp 默认只处理单个文件,传整个目录必须显式启用递归模式:
-
本地目录 → 远程服务器:
scp -r /本地/目录路径 用户名@远程IP:/远程/目标路径/ - 注意末尾斜杠不是必须的,但会影响远程目录结构:不加斜杠会把整个目录(含名字)复制过去;加斜杠则只复制目录内容
- 例如:
scp -r ./myapp user@192.168.1.100:/home/user/deploy/,会在远程生成/home/user/deploy/myapp/
常见实用选项
传输过程中可根据需要叠加参数提升效率或可靠性:
-
-P 端口号:如果远程 SSH 服务不在默认 22 端口,比如用了 2222,就写
scp -r -P 2222 ... - -C:启用压缩,对文本类目录(如代码、日志)能明显加快传输
- -p:保留源文件的权限、时间戳等属性,适合部署脚本或配置文件
- -v:加这个参数可以看到详细传输过程,排错时很有用
权限与路径注意事项
实际执行时常遇到“Permission denied”或“no such file”类报错,多数源于路径或权限问题:
- 远程目标路径必须存在,且当前用户对该路径有写入权限;
scp不会自动创建父级目录 - 如果远程路径不存在,先用
ssh user@ip 'mkdir -p /path/to/dir'创建好 - 避免在路径中使用波浪号
~,建议写绝对路径,比如/home/user/data而非~/data - 若频繁传输,建议配置 SSH 密钥登录,免去每次输密码
替代方案提示
如果目录很大、需多次同步或断网重连,scp 就不太合适了:
-
rsync 更适合:支持增量同步、断点续传,命令如
rsync -avz ./myapp/ user@ip:/remote/path/(注意源路径末尾斜杠表示“内容”) - rsync 的
-a已包含递归、权限、时间戳等,-z自动压缩,日常同步推荐优先考虑











