场景:
需要把 服务器上的目录下载到 Windows 本地 ,确认无误后,再完整上传到另一台服务器的指定目录 。
常见于:数据迁移、备份恢复等场景。
一、整体流程说明(先看这个很重要)
完整流程如下:
服务器 A
↓(SSH)
Windows 本地
↓(SSH)
服务器 B(目标目录)
对应步骤:
- 服务器 A → Windows:下载目录
- Windows:确认文件完整
- Windows → 服务器 B:上传到指定目录
- 服务器 B:校验目录 & 修正权限
二、环境准备
Windows 端
- Windows 10 / 11(自带 OpenSSH)
- 或安装 Git Bash / WSL(推荐 rsync)
服务器端
- SSH 可连接
- 有写入目标目录的权限
- (rsync 方案)服务器已安装
rsync
三、服务器目录下载到 Windows
✅ 方案一:scp(最简单,适合一次性)
下载命令
powershell
scp -r user@服务器A:/remote/source_dir C:\Users\5277\Downloads\source_dir\
示例
powershell
scp -r root@192.168.1.10:/opt/project C:\Users\5277\Downloads\project\
下载完成后,本地目录结构:
C:\Users\5277\Downloads\project
✅ 方案二:rsync(推荐,支持断点续传)
适合:目录大、重要数据、网络不稳定
bash
rsync -avz --progress \
root@192.168.1.10:/opt/project/ \
/mnt/c/Users/5277/Downloads/project/
参数说明:
-a:保持权限、时间-v:显示过程-z:压缩传输--progress:实时进度
⚠️ 注意路径末尾 /,否则会多嵌套一层目录。
四、Windows 本地校验文件完整性(强烈建议)
1️⃣ 查看文件是否存在
bash
ls -lh C:\Users\5277\Downloads\project
2️⃣ 文件数量校验(简单但有效)
bash
find C:\Users\5277\Downloads\project | wc -l
五、Windows 上传目录到目标服务器
目标服务器目录
/home/project
✅ 使用 scp 上传(最省事)
powershell
scp -r "C:\Users\5277\Downloads\project" root@服务器B:/home/project
上传后结构为:
/home/project/project
如果只想上传 project 内部内容:
powershell
scp -r "C:\Users\5277\Downloads\project\*" root@服务器B:/home/project/
✅ 使用 rsync 上传(生产环境推荐)
bash
rsync -avz --progress /mnt/c/Users/5277/Downloads/project/ root@192.168.1.20:/home/project/
优势:
- 支持断点续传
- 可重复执行
- 不会重复传输已存在文件
六、上传完成后的关键检查(很多人翻车在这)
1️⃣ 查看目录
bash
ls -lh /home/project
2️⃣ 修正权限
bash
chown -R dk_project:dk_project /home/project
chmod -R 755 /home/project
⚠️ 如果是 Docker:
bash
docker inspect zfile | grep Mounts -A 10
确认宿主机目录是否正确挂载。
七、常见问题与坑位总结
❌ scp 中断?
- 只能重来
- 重要数据请用 rsync
❌ 多套一层目录?
- 路径末尾
/用错了
八、推荐实践总结(实话)
| 场景 | 推荐方案 |
|---|---|
| 小目录、临时传输 | scp |
| 生产数据 / 大目录 | rsync |
| 新手、可视化 | WinSCP |
| Docker 数据目录 | rsync + 权限校验 |
九、完整命令模板(可直接复用)
bash
# 服务器 A → Windows
rsync -avz --progress root@服务器A:/源目录/ /mnt/c/tmp/source/
# Windows → 服务器 B
rsync -avz --progress /mnt/c/tmp/source/ root@服务器B:/home/project/
十、结语
这类 "服务器 ↔ Windows ↔ 服务器" 的目录迁移,本质拼的是:
- 工具是否靠谱(rsync > scp)
- 路径是否严谨
- 权限是否到位
命令本身不难,翻车往往是细节。