局域网内两台电脑之间的文件迁移工具:可中断、可续传、自动跳过依赖目录。 支持 Windows -> Windows 和 Windows -> Mac(双向均可,接收端/发送端跨平台)。
- 断了再续:Ctrl+C、合盖、断网、关机都安全,重跑即从断点继续
- 换网也行:按设备指纹重新发现新 IP,任务自动接续
- 自动跳过
node_modules/venv/target等依赖目录(上下文感知,只有旁边有package.json等标记文件才排除) - 传输引擎为 rclone,已内置于发行版 —— 拷到新电脑开箱即用,启动零下载
- 同名内容三选一:发送前自动探测接收端是否已有同名文件夹,可选 覆盖 / 只传差异(新电脑更新过的保留)/ 两份都保留(旧版本加 -old 后缀);接收端文件永不被删除
- 启动自检(
lanmigrate doctor):权限/端口/防火墙一目了然;管理员运行自动放行防火墙,标准用户给出明确指引(发送端永远不需要管理员权限) - 端口可更换:接收端在 GUI 里即可改端口(默认 2022;标准用户被防火墙拦截时,可改用本机已放行的端口如 8080),发送端自动发现会带上正确端口
- 多文件夹同时传输:传输中点"再传一个文件夹"即可并行再发,进度页每任务一张卡片;默认在接收端建同名子文件夹,内容不混淆
- 接收端免重启换批:一批传完点"完成接收,继续收下一个"即可直接收下一个文件夹;接收端还能实时看到"已接收 N 个文件"
- 断点记录按设备独立保存:首页列出每台设备的未完成任务,可分别继续,互不覆盖;两台设备可同时续传。接收端可沿用上次配对码,隔天续传无需重新配对
- 失败原因看得见:连不上接收端 / 配对码不对 / 文件被占用 / 文件夹正在被使用(边用边传属正常,每轮自动补传新变化),提示各不相同;接收端换了配对码时,任务卡片上直接输入新码即可续传,无需重走向导
- 扫过的文件夹不重扫:再次选择同一文件夹直接使用上次扫描结果(可手动重扫),百 GB 大目录零等待进入下一步
- 防火墙"阻止规则"自检:防火墙弹窗被取消时系统会静默创建阻止规则(换端口也没用),接收端启动后自动检测并给出精确修复指引;管理员运行时自动清除并放行
直接下载:Releases 提供
安装包(LanMigrate_x.y.z_x64-setup.exe)、免安装 zip 和命令行单文件 exe,
由 GitHub Actions 自动构建(推 v* 标签即出新版,附 SHA-256 校验)。
gui/ 是 Tauri 桌面应用:双击运行,首页选"发送"或"接收",按提示操作即可,
无需命令行。所有传输逻辑与 CLI 完全一致(同一套 Python 模块)。
cd gui
npm install
npm run tauri build # 产物在 gui/src-tauri/target/release/bundle/nsis/
npm run tauri dev # 开发模式(直接跑仓库里的 Python 代码)
构建需要 Rust + Node.js;发行版内置 PyInstaller 打包的后端
(先 pyinstaller ... entry.py 生成 dist/lanmigrate.exe,
再复制为 gui/src-tauri/binaries/lanmigrate-x86_64-pc-windows-msvc.exe)。
两台电脑都需要 Python 3.11+,克隆本仓库后:
pip install typer rich zeroconf
Windows 或 Mac 均可:
python -m lanmigrate receive D:\Migration # Windows
python -m lanmigrate receive ~/Migration # Mac
屏幕会显示一个 6 位配对码 和本机 IP。窗口保持打开。
Windows 首次使用请以管理员放行防火墙端口(命令已在屏幕上给出); Mac 首次运行会弹一次"允许接受传入网络连接",点允许。
python -m lanmigrate send D:\projects
流程:快速扫描(秒级,仅识别可跳过的依赖目录)-> 显示"智能排除建议"(可勾选)
-> 自动发现接收端(或手动 --host <IP>)-> 输入配对码 -> 立即开始传输。
如需完整体积统计与"节省了 X GB"报告,加 --full(大目录需几分钟)。
之后即可走人:
- 任何时候 Ctrl+C / 断网 / 关机都安全
- 恢复:
python -m lanmigrate resume(换了 Wi-Fi/IP 也能自动找回设备) - 全自动循环重跑,直到所有文件成功才停(被占用的文件下一轮自动补传)
两台电脑同时使用期间,旧电脑上又改了一些文件?
python -m lanmigrate sync # 重跑最近的迁移任务,只传有变化的文件
安全语义:新电脑上更新过的文件不会被覆盖(--update,按修改时间判断), 接收端的文件不会被删除。GUI 首页的"增量同步"卡片一键完成同样操作。 (接收端照常运行 receive 即可,配对码不变。)
python -m lanmigrate tasks # 查看所有迁移任务
python -m lanmigrate send --help # 全部参数(--yes 免确认、--dest 子目录等)
python -m lanmigrate receive --code 123456 --port 2022 # 固定配对码/端口
规则在 lanmigrate/rules.toml,数据与代码分离:
- 上下文相关排除:目录旁存在标记文件才排除(有
package.json才排node_modules; 一个恰好叫build的普通文件夹不会被误杀) - 全局垃圾:
Thumbs.db、$RECYCLE.BIN、.DS_Store、__pycache__等无条件排除 .git默认保留(历史有价值),体积超过 1GB 时在报告中提示
欢迎提交 PR 扩充语言生态。
发送端(旧电脑) 接收端(新电脑)
scanner: 扫描 + 规则引擎 mDNS 广播 + 配对码
discovery: mDNS 发现 --SFTP--> rclone serve sftp(会话凭据)
taskstore: 任务持久化/断点
engine: rclone copy 封装(JSON 日志进度)
- SFTP 密码由配对码本地推导,不经网络传输;rclone 自带传输加密
- 断点判定:大小 + 修改时间(可跑
rclone check严格校验,见M0-迁移指南.md第五节) - 任务状态存于
~/.lanmigrate/tasks/,原子写入,中断不损坏
migrate.ps1 + filters.txt + M0-迁移指南.md 是纯 rclone 的手工方案,
行为与本工具一致,可用于无法装 Python 的接收端(如临时借用的电脑)。
python -m venv .venv && .venv\Scripts\activate
pip install typer rich zeroconf pytest
pytest
产品需求与验收标准见 prd.md。MIT License。