WSL + rsync快速服务器同步
什么是WSL
WSL(Windows Subsystem for Linux,Windows Linux 子系统)是微软为 Windows 系统开发的一款 兼容层工具,核心作用是让用户在不安装传统虚拟机、不切换双系统的前提下,直接在 Windows 中运行完整的 Linux 发行版(如 Ubuntu、Debian、CentOS 等),并原生使用 Linux 的命令行工具、开发环境和应用程序。
简单来说:WSL 相当于在 Windows 系统里 “嵌入” 了一个轻量级的 Linux 环境,既能保留 Windows 的图形界面和日常操作,又能无缝使用 Linux 的命令行能力(如 bash、gcc、docker、nginx 等),是开发、运维、学习 Linux 人群的常用工具。
一、核心概念:WSL 1 vs WSL 2
WSL 分为两个主要版本,两者架构和能力差异较大,实际使用中需根据需求选择:
| 对比维度 | WSL 1 | WSL 2(推荐) |
|---|---|---|
| 核心架构 | 基于 “系统调用翻译层”:将 Linux 系统调用翻译成 Windows 系统调用,无需虚拟化 | 基于 “Hyper - V 轻量级虚拟机”:在 Windows 中创建一个极小的、优化过的 Linux 内核虚拟机(但无需手动管理虚拟机) |
| 性能 | 访问 Windows 文件快,但 Linux 原生功能(如编译、Docker)性能较弱 | Linux 原生功能性能接近物理机,支持更多高负载场景(如 Docker、数据库),但访问 Windows 文件稍慢 |
| 功能支持 | 不支持需要 Linux 内核级特性的工具(如 Docker、KVM、部分内核模块) | 支持几乎所有 Linux 功能(Docker、Systemd、内核调试、虚拟化工具) |
| 文件系统互通 | Windows 和 Linux 文件系统可直接访问,但路径格式需适配 | 同样支持文件互通,但建议将高频访问的项目放在 Linux 原生文件系统中(性能更好) |
| 适用场景 | 简单 Linux 命令(如 grep、ssh)、轻量脚本运行 | 开发环境(Web / 后端开发)、Docker 容器、Linux 运维工具、内核级应用测试 |
二、WSL 的核心优势(为什么用 WSL?)
相比传统虚拟机(如 VMware、VirtualBox)或双系统,WSL 的核心优势在于 “轻量、无缝、高效”:
无需复杂配置,开箱即用
从微软商店直接安装 Linux 发行版(如 Ubuntu),几分钟即可完成初始化,无需手动配置虚拟机网络、磁盘分区。
资源占用极低
WSL 2 启动后仅占用几百 MB 内存(远低于传统虚拟机的数 GB 占用),启动速度快(10 秒内启动 Linux 系统),关闭后自动释放资源。
Windows 与 Linux 无缝互通
- 文件互通:在 Windows 中可直接访问 WSL 的 Linux 文件(路径如
\\wsl$\Ubuntu\home\你的用户名);在 WSL 中也可访问 Windows 文件(路径如/mnt/c/Users/你的Windows用户名/,C盘对应/mnt/c,D盘对应/mnt/d)。 - 工具互通:在 WSL 中可调用 Windows 程序(如
code .直接用 VS Code 打开当前 Linux 目录的文件);在 Windows 命令行(CMD/PowerShell)中也可调用 WSL 命令(如wsl ls查看 Linux 目录)。
- 文件互通:在 Windows 中可直接访问 WSL 的 Linux 文件(路径如
原生支持开发工具链
完美兼容 Linux 生态的开发工具,如gcc、python、node.js、docker、nginx等,无需担心 Windows 与 Linux 环境不一致导致的 “开发时正常、部署时出错” 问题。
三、WSL 的安装与基本使用(以 WSL 2 为例)
1. 前置条件
- 系统版本:Windows 10 2004 及以上(或 Windows 11 任意版本)。
- 硬件支持:开启 CPU 虚拟化功能(进入电脑 BIOS 开启,不同主板型号路径不同,通常在 “CPU Configuration” 中开启 “Intel VT - x” 或 “AMD - V”)。
2. 安装步骤(3 步完成)
步骤 1:开启 WSL 相关功能
以 管理员身份 打开 PowerShell,执行以下命令(开启 WSL 和虚拟机平台功能):
wsl --install- 该命令会自动开启 “适用于 Linux 的 Windows 子系统”“虚拟机平台” 两个功能,并下载安装默认的 Linux 发行版(通常是 Ubuntu)。
- 执行后重启电脑,让功能生效。
步骤 2:初始化 Linux 发行版
重启后,系统会自动启动已安装的 Linux 发行版(如 Ubuntu),首次启动需设置 Linux 用户名 和 密码(与 Windows 用户名 / 密码无关,用于 Linux 系统内的权限管理)。
示例:
Enter new UNIX username: testuser # 输入你想设置的Linux用户名(如testuser)
Enter new UNIX password: # 输入密码(输入时不显示,输完按回车)
Retype new UNIX password: # 再次输入密码确认设置完成后,即可进入 Linux 命令行界面(testuser@DESKTOP - XXXXX:~$ 开头的提示符,代表已在 Linux 环境中)。
步骤 3:(可选)切换 WSL 版本
若默认安装的是 WSL 1,可通过以下命令切换到 WSL 2(性能更好):
先查看已安装的 Linux 发行版名称:
powershellwsl --list --verbose # 简称 wsl -l -v列是当前版本:
plaintextNAME STATE VERSION Ubuntu Running 1切换版本(将
Ubuntu替换为你的发行版名称):powershellwsl --set-version Ubuntu 2- 切换过程需要几分钟(需下载 Linux 内核文件),等待提示 “转换完成” 即可。
四、WSL 的基本操作
1. 启动与关闭 WSL
- 启动:
- 方法 1:直接在 Windows 开始菜单中搜索 Linux 发行版名称(如 “Ubuntu”),点击启动。
- 方法 2:在 PowerShell/CMD 中执行
wsl命令,直接进入默认 Linux 发行版。
- 关闭:
- 方法 1:在 Linux 命令行中执行
exit退出当前会话(若只有一个会话,WSL 会自动关闭)。 - 方法 2:在 PowerShell 中执行
wsl --shutdown,强制关闭所有 WSL 实例(用于解决 WSL 卡死等问题)。
- 方法 1:在 Linux 命令行中执行
2. 文件路径互通
Windows 访问 Linux 文件:
打开 Windows 文件管理器,在地址栏输入
\\wsl$\即可看到已安装的 Linux 发行版,双击进入后可直接访问 Linux 的目录(支持复制、粘贴文件)。
Linux 访问 Windows 文件:
在 WSL 中,Windows 的磁盘(C、D、E 盘)会被挂载到
/mnt/目录下,例如:
C 盘路径:
/mnt/c(对应 Windows 的C:\)D 盘路径:
/mnt/d(对应 Windows 的D:\)示例:访问 Windows 桌面的文件:
bashcd /mnt/c/Users/你的Windows用户名/Desktop # 进入Windows桌面目录 ls # 查看桌面文件
3. 安装 Linux 软件
与原生 Linux 完全一致,通过发行版的包管理器安装软件,例如:
- Ubuntu/Debian(用
apt):
sudo apt update # 更新软件源
sudo apt install nginx # 安装Nginx
sudo apt install docker.io # 安装Docker- CentOS(用
yum或dnf):
sudo yum install gcc # 安装GCC编译器五、WSL 的常见用途
开发环境搭建
是 WSL 最核心的用途:开发者可在 Windows 上使用 Linux 原生的开发工具链,例如:
- Web 开发:用
node.js、npm、nginx搭建服务; - 后端开发:用
Python、Java、Go编译运行程序,对接 Linux 下的数据库(如 MySQL、Redis); - 容器开发:WSL 2 支持 Docker Desktop,可直接在 Linux 环境中运行 Docker 容器(性能比 Windows 原生 Docker 更好)。
- Web 开发:用
Linux 运维与脚本运行
运维人员可在 Windows 中直接使用 Linux 运维工具,如
ssh远程连接服务器、ansible批量管理节点、shell脚本编写与执行(无需担心 Windows CMD 不兼容 Linux 脚本语法)。Linux 学习
新手学习 Linux 时,无需安装复杂的虚拟机或双系统,通过 WSL 可快速熟悉 Linux 命令行、文件系统、权限管理等基础操作,且出错后可随时重装(从微软商店重新安装发行版即可)。
六、注意事项
WSL 2 需要 Hyper - V 支持
虽然 WSL 2 基于 Hyper - V,但无需手动安装 Hyper - V 完整组件(
wsl --install会自动配置);若电脑不支持硬件虚拟化(如老旧 CPU),则只能使用 WSL 1。文件系统性能差异
- WSL 2 中,Linux 原生文件系统(
\\wsl$\下的文件)性能远高于 Windows 文件系统(/mnt/c下的文件)。因此,建议将开发项目、编译任务放在 Linux 原生目录中(如/home/用户名/project),避免放在 Windows 磁盘中导致卡顿。
- WSL 2 中,Linux 原生文件系统(
部分 Linux 功能仍有限制
WSL 并非 100% 复刻物理机 Linux,部分依赖硬件底层的功能仍不支持,例如:
- 无法直接运行 Linux 图形界面程序(需配合 X Server 工具,如 VcXsrv,才能显示 GUI 窗口);
- 不支持 Linux 内核的部分虚拟化功能(如 KVM 嵌套虚拟化)。
版本切换与数据兼容
WSL 1 和 WSL 2 的数据可以兼容(切换版本后文件不会丢失),但切换时需注意:WSL 2 转 WSL 1 可能会因功能依赖导致部分软件无法运行(如 Docker)。
总结
WSL 是 Windows 与 Linux 生态的 “桥梁”—— 它既解决了 Windows 缺乏原生 Linux 环境的痛点,又避免了传统虚拟机 “重资源、高延迟” 的问题,尤其适合 开发者、运维人员、Linux 学习者 使用。如果你的工作需要频繁在 Windows 和 Linux 环境间切换,WSL 几乎是最优解。
WSL + rsync 同步
在 WSL(Windows Subsystem for Linux)中使用 rsync 向 Linux 服务器同步文件,是一种高效、原生的方案 ——WSL 内的 Linux 发行版(如 Ubuntu、Debian)可直接调用原生 rsync 命令,无需在 Windows 端安装额外工具(如 cwRsync),且支持 ssh 加密传输(安全且无需配置复杂的 rsyncd 服务)。
一、核心优势
相比 Windows 原生环境,WSL + rsync 同步的优势:
- 原生 Linux 工具链:WSL 内的
rsync与目标 Linux 服务器的rsync版本兼容,避免跨系统适配问题; - 无缝访问 Windows 文件:WSL 可直接访问 Windows 磁盘(如
C:\对应/mnt/c/,D:\对应/mnt/d/),无需手动拷贝文件到 WSL; - 支持 SSH 免密登录:通过 WSL 生成 SSH 密钥,可实现向 Linux 服务器的免密同步,适合自动化场景。
二、前置准备
需确保 WSL 环境、目标 Linux 服务器、网络连通性三者就绪:
1. WSL 端准备(以 Ubuntu 为例)
① 安装 rsync(若未默认安装)
WSL 内的 Ubuntu 通常预装 rsync,若未安装,执行:
sudo apt update && sudo apt install -y rsync验证安装:rsync --version(显示版本号即正常)。
② 确认 WSL 可访问目标 Linux 服务器
通过 ssh 测试连通性(rsync 优先推荐 ssh 传输模式):
ssh 目标Linux用户名@目标LinuxIP # 例如:ssh user@192.168.1.100- 首次连接会提示 “是否继续连接”,输入
yes后,输入目标服务器密码,若能成功进入目标服务器的命令行,说明网络连通。 - 若连接失败:检查目标服务器防火墙是否开放 22 端口(
sudo ufw allow 22)、IP 是否正确、网络是否互通(ping 目标LinuxIP)。
2. 目标 Linux 服务器准备
无需额外安装 rsync(绝大多数 Linux 发行版预装),仅需确保:
SSH 服务正常运行:
sudo systemctl status ssh(显示active (running)即正常,未运行则执行sudo systemctl start ssh);目标同步目录权限:确保目标服务器的同步目录(如
/home/user/sync_dir)允许当前用户读写,例如:bash# 在目标服务器上创建同步目录并设置权限 mkdir -p /home/user/sync_dir chown -R user:user /home/user/sync_dir # 替换为你的用户名
三、两种同步模式(推荐 SSH 模式)
rsync 支持两种核心同步模式:SSH 传输模式(无服务端,简单安全)和 rsyncd 服务模式(需配置服务端,适合频繁同步)。
模式 1:SSH 传输模式(推荐,无需配置 rsync 服务)
通过 ssh 协议作为传输通道,直接同步文件,无需在目标服务器配置 rsyncd 服务,适合临时或常规同步场景。
核心命令格式
rsync [参数] 本地源路径 目标Linux用户名@目标LinuxIP:远程目标路径常用参数说明
| 参数 | 作用 |
|---|---|
-a | 归档模式(关键参数):包含 -r(递归)、-l(保留软链接)、-p(保留权限)、-t(保留时间戳)等,适合完整目录同步 |
-v | 详细输出:显示同步的文件列表和进度,便于排查问题 |
-z | 压缩传输:减少网络带宽占用(适合跨网络同步,本地局域网可省略) |
--progress | 显示实时同步进度(如文件大小、传输百分比、剩余时间) |
--delete | 镜像同步:删除远程目标路径中 “本地源路径没有” 的文件,确保两端完全一致(谨慎使用!) |
-e "ssh -p 端口号" | 若目标服务器 SSH 端口非默认 22(如 2222),需指定端口 |
--exclude 文件名/目录 | 排除不需要同步的文件或目录(可多次使用) |
实际示例
以下示例均在 WSL 终端中执行:
示例 1:同步 WSL 内的目录到 Linux 服务器
假设在 WSL 内有目录 /home/ubuntu/documents/(WSL 原生路径),需同步到目标服务器 user@192.168.1.100 的 /home/user/sync_dir/:
rsync -avz --progress /home/ubuntu/documents/ user@192.168.1.100:/home/user/sync_dir/- 注意路径末尾的
/:/home/ubuntu/documents/表示同步目录内的所有文件,若去掉/(即documents),则会在远程创建sync_dir/documents/再同步文件。
示例 2:同步 Windows 磁盘的文件到 Linux 服务器
假设要同步 Windows D:\工作文件\project\ 到目标服务器,WSL 中该路径对应 /mnt/d/工作文件/project/:
rsync -avz --progress /mnt/d/工作文件/project/ user@192.168.1.100:/home/user/sync_dir/project/- 无需将 Windows 文件拷贝到 WSL 内,直接通过
/mnt/路径访问并同步,高效便捷。
示例 3:指定 SSH 非默认端口 + 排除文件
若目标服务器 SSH 端口为 2222,且需排除 *.log 日志文件和 temp/ 临时目录:
rsync -avz --progress -e "ssh -p 2222" --exclude "*.log" --exclude "temp/" /home/ubuntu/documents/ user@192.168.1.100:/home/user/sync_dir/示例 4:镜像同步(删除远程多余文件)
若需确保远程目录与本地完全一致(远程有、本地没有的文件会被删除),添加 --delete 参数(谨慎使用,避免误删重要文件):
rsync -avz --progress --delete /home/ubuntu/documents/ user@192.168.1.100:/home/user/sync_dir/模式 2:rsyncd 服务模式(适合频繁 / 自动化同步)
若需定期、自动化同步(如定时任务),可在目标 Linux 服务器配置 rsyncd 服务(独立于 SSH),通过模块名访问,无需每次输入 SSH 密码(可配置独立认证)。
步骤 1:目标 Linux 服务器配置 rsyncd 服务
① 编辑 rsyncd 配置文件
sudo vim /etc/rsyncd.conf添加以下配置(根据实际需求修改):
# 全局配置
uid = user # 运行 rsync 服务的用户(替换为你的目标服务器用户名)
gid = user # 运行 rsync 服务的用户组
use chroot = no # 不启用 chroot(避免权限问题)
max connections = 5 # 最大连接数
pid file = /var/run/rsyncd.pid # PID 文件路径
log file = /var/log/rsyncd.log # 日志文件路径(便于排查问题)
# 同步模块配置(自定义模块名,如 [sync_module])
[sync_module]
path = /home/user/sync_dir # 模块对应的实际目录(目标同步目录)
comment = Sync files from WSL # 模块描述(可选)
read only = no # 允许写入(同步到服务器需设为 no)
list = yes # 允许列出模块(调试用)
auth users = rsync_user # 认证用户名(自定义,如 rsync_user)
secrets file = /etc/rsyncd.secrets # 密码文件路径
hosts allow = 192.168.1.0/24 # 允许访问的 IP 段(如 WSL 所在网段,增强安全性)② 创建密码文件并设置权限
# 创建密码文件(格式:用户名:密码,如 rsync_user:123456)
sudo echo "rsync_user:123456" > /etc/rsyncd.secrets
# 必须设置 600 权限(否则 rsync 服务无法读取)
sudo chmod 600 /etc/rsyncd.secrets③ 启动 rsyncd 服务并设置开机自启
# 启动服务
sudo systemctl start rsync
# 设置开机自启
sudo systemctl enable rsync
# 验证服务状态(显示 active 即正常)
sudo systemctl status rsync④ 开放 rsync 端口(默认 873)
若目标服务器启用防火墙(如 ufw),需允许 873 端口:
sudo ufw allow 873
sudo ufw reload步骤 2:WSL 端通过 rsyncd 模块同步
核心命令格式(无需 SSH,直接连接 rsync 模块):
rsync [参数] 本地源路径 rsync_user@目标LinuxIP::sync_module/远程子路径::sync_module:双冒号后接目标服务器配置的模块名(如 [sync_module]);- 需指定
auth users配置的用户名(如 rsync_user),密码可通过密码文件自动输入(避免交互)。
示例:WSL 同步到 rsyncd 模块
# 方法 1:手动输入密码
rsync -avz --progress /home/ubuntu/documents/ rsync_user@192.168.1.100::sync_module/
# 方法 2:通过密码文件自动输入(适合自动化)
# 1. 在 WSL 内创建密码文件(仅含密码,如 123456)
echo "123456" > ~/.rsync_secrets
# 2. 设置 600 权限
chmod 600 ~/.rsync_secrets
# 3. 同步时指定密码文件
rsync -avz --progress --password-file=~/.rsync_secrets /home/ubuntu/documents/ rsync_user@192.168.1.100::sync_module/四、优化:SSH 免密登录(避免每次输密码)
无论使用哪种模式,若基于 SSH 传输,可通过 SSH 密钥登录 实现免密同步,步骤如下:
1. 在 WSL 内生成 SSH 密钥对
ssh-keygen -t rsa -b 4096 # 生成 RSA 密钥对(4096 位加密更安全)- 执行后按 3 次回车(无需设置密钥密码,若需更高安全可设置);
- 密钥对默认保存在
~/.ssh/目录:id_rsa(私钥,勿泄露)、id_rsa.pub(公钥,需上传到目标服务器)。
2. 将公钥上传到目标 Linux 服务器
ssh-copy-id -i ~/.ssh/id_rsa.pub 目标Linux用户名@目标LinuxIP- 首次执行需输入目标服务器密码,上传成功后,后续通过
ssh或rsync连接时无需再输密码。
3. 验证免密登录
ssh 目标Linux用户名@目标LinuxIP # 无需输密码即可进入目标服务器- 若成功登录,后续
rsync同步命令(如模式 1 的示例)将自动免密执行。
五、自动化:定时同步(结合 crontab)
若需定期同步(如每天凌晨 2 点),可在 WSL 内通过 crontab 设置定时任务:
1. 编辑 crontab 任务列表
crontab -e- 首次执行会提示选择编辑器,推荐选
nano(简单易用)。
2. 添加定时任务(示例)
在文件末尾添加以下内容(每天凌晨 2 点同步 WSL 目录到目标服务器):
# 格式:分 时 日 月 周 命令
0 2 * * * rsync -avz --delete /home/ubuntu/documents/ user@192.168.1.100:/home/user/sync_dir/ > ~/rsync_cron.log 2>&1> ~/rsync_cron.log 2>&1:将同步日志输出到~/rsync_cron.log,便于排查问题;- 时间格式说明:
0 2 * * *表示 “每分钟 0 分、每小时 2 点、每天、每月、每周任意日”。
3. 重启 crontab 服务(确保生效)
sudo systemctl restart cron
sudo systemctl enable cron # 设置开机自启六、常见问题排查
- 同步权限被拒(Permission denied):
- 检查目标服务器同步目录权限(确保
chown到当前用户); - WSL 内本地文件权限不足:执行
chmod -R 755 本地源路径(根据需求调整权限)。
- 检查目标服务器同步目录权限(确保
- rsync: connection refused:
- SSH 模式:检查目标服务器 SSH 服务是否运行、22 端口是否开放;
- rsyncd 模式:检查目标服务器 rsync 服务是否运行、873 端口是否开放。
- 同步速度慢:
- 跨网络同步:添加
-z参数压缩传输; - 本地局域网:可去掉
-z(压缩会消耗 CPU,反而降低速度); - 排除大文件 / 无用文件:使用
--exclude参数减少同步数据量。
- 跨网络同步:添加
- Crontab 任务不执行:
- 检查命令路径是否绝对(如
rsync路径可通过which rsync查看,确保在 crontab 中用绝对路径); - 查看日志:
cat ~/rsync_cron.log排查具体错误(如权限、网络问题)。
- 检查命令路径是否绝对(如
总结
WSL + rsync 是 Windows 向 Linux 服务器同步文件的高效方案:
- 优先选择 SSH 模式(无需配置服务端,安全简单),配合 SSH 免密登录实现便捷同步;
- 频繁自动化同步可选择 rsyncd 模式 + crontab,减少交互操作;
- 同步 Windows 文件时,直接通过 WSL 的
/mnt/路径访问,无需额外拷贝,提升效率。
同步脚本
这是一份windows使用WSL的rsync功能快速向指定linux服务器同步的脚本示例
@echo off
@echo on :: 关键:显示每一步执行过程,方便定位错误
setlocal enabledelayedexpansion
:: ==============================================
:: 配置区域(必须根据你的实际情况修改!)
:: ==============================================
set "LOCAL_DIR=/mnt/d/DL/Project/ww-blog/dist/" :: WSL下的本地目录(确保存在)
set "REMOTE_USER=root" :: 远程Linux用户名(如root、ubuntu)
set "REMOTE_HOST=121.199.xx.xx" :: 远程服务器IP(确保能ping通)
set "REMOTE_DIR=/xx/dist/" :: 远程目录(确保有写入权限)
set "SSH_PORT=22" :: 远程SSH端口(默认22,无需改则保留)
:: ==============================================
:: 1. 防止闪退:任何命令出错立即暂停并提示
echo.
echo ==============================================
echo 正在检查基础环境(WSL是否可用)...
echo ==============================================
:: 检查WSL是否已安装并启用
wsl --version >nul 2>&1
if %errorlevel% neq 0 (
echo.
echo 【错误1】WSL未安装或未启用!
echo 解决方法:
echo 1. 按Win+X打开"终端(管理员)",执行 wsl --install 安装WSL
echo 2. 安装后重启电脑,再运行此脚本
pause :: 强制暂停,不关闭窗口
exit /b 1
)
:: 2. 检查本地目录是否存在(WSL路径)
echo.
echo ==============================================
echo 正在检查本地目录:%LOCAL_DIR%
echo ==============================================
wsl ls "%LOCAL_DIR%" >nul 2>&1 :: 用WSL命令检查路径是否存在
if %errorlevel% neq 0 (
echo 本地目录检查成功:%LOCAL_DIR%
) else (
echo.
echo 【错误2】本地目录不存在!
echo 请确认:
echo 1. WSL下的路径是否正确(比如D盘对应/mnt/d/,不要漏写/mnt/)
echo 2. 目录是否已创建(在WSL中执行 mkdir -p %LOCAL_DIR% 创建)
pause
exit /b 1
)
:: 通过SSH自动创建远程目录(如果不存在)
echo.
echo ==============================================
echo 正在检查并创建远程目录:%REMOTE_DIR%
echo ==============================================
wsl ssh -p %SSH_PORT% %REMOTE_USER%@%REMOTE_HOST% "mkdir -p %REMOTE_DIR%"
if %errorlevel% equ 0 (
echo 远程目录准备成功(已存在或已创建)
) else (
echo.
echo 【错误3】无法创建远程目录!
echo 可能原因:SSH连接失败/远程用户无权限
echo 请手动测试SSH连接:
echo wsl ssh -p %SSH_PORT% %REMOTE_USER%@%REMOTE_HOST%
pause
exit /b 1
)
:: 3. 执行rsync同步(核心命令)
echo.
echo ==============================================
echo 开始同步文件...
echo 远程目标:%REMOTE_USER%@%REMOTE_HOST%:%REMOTE_DIR%(端口%SSH_PORT%)
echo ==============================================
:: 用WSL执行rsync,输出详细日志到屏幕(不隐藏错误)
wsl rsync -avz --progress --delete -e "ssh -p %SSH_PORT%" "%LOCAL_DIR%" "%REMOTE_USER%@%REMOTE_HOST%:%REMOTE_DIR%"
:: 4. 检查同步结果
if %errorlevel% equ 0 (
echo.
echo ==============================================
echo 【成功】文件同步完成!
echo ==============================================
) else (
echo.
echo ==============================================
echo 【错误3】同步失败!常见原因:
echo 1. 远程服务器IP/端口错误(无法连接)
echo 2. 远程用户名错误(比如不是root,而是ubuntu)
echo 3. 远程目录无写入权限(在远程执行 chown -R %REMOTE_USER% %REMOTE_DIR%)
echo 4. 首次连接未确认SSH密钥(手动在WSL中执行 ssh %REMOTE_USER%@%REMOTE_HOST% 确认)
echo ==============================================
)
:: 5. 强制暂停,确保窗口不关闭
echo.
echo 按任意键关闭窗口...
pause
endlocal