完整指南:触发命令、存储原理与自动备份机制)
Wox 备份与恢复插件Backup and Restore Plugin完整指南触发命令、存储原理与自动备份机制【免费下载链接】WoxA cross-platform launcher that simply works项目地址: https://gitcode.com/gh_mirrors/wo/WoxWox 内置的 Backup and Restore 系统插件负责将 Wox 的用户数据目录整体导出为备份快照并在需要时一键回滚是重置数据目录或跨机器迁移配置前的标准安全操作。本文基于官方文档与源码实现完整讲解backup/restore触发命令的用法、备份快照的存储格式与清理策略、以及自动备份与更新前备份等内置保护机制帮助你掌握一套可复现、可验证的配置备份与恢复方案。一、插件定位何时需要手动备份Backup 插件面向两种典型场景重置数据目录之前以及把当前设置迁移到另一台机器时。它做的事情本质上是对 Wox 用户数据目录做一次整体快照后续可以随时把快照中的设置、数据原样还原回去。如果你的目标是多台设备长期保持配置一致官方文档更推荐使用 Cloud Sync它能在不手动导出/导入的前提下持续同步设置Backup 插件则更适合一次性、确定性的备份与还原。从源码看该插件是随 Wox 一起内置注册的系统插件注册入口在 wox.core/plugin/system/backup.gofunc init() { plugin.AllSystemPlugin append(plugin.AllSystemPlugin, BackupPlugin{}) }插件元数据声明了两个触发关键词restore与backup并支持 Windows、macOS、Linux 三个平台wox.core/plugin/system/backup.goTriggerKeywords: []string{ restore, backup, }, SupportedOS: []string{ Windows, Macos, Linux, },因此在使用前无需安装任何额外组件直接呼出 Wox 输入触发词即可。二、快速上手两条触发命令2.1 backup —— 立即导出一次备份在 Wox 搜索框中输入backup插件会返回一个结果项wox.core/plugin/system/backup.go标题为立即备份i18n 键plugin_backup_now副标题提示这是一次手动备份。激活它后底层会调用设置管理器的Backup(ctx, setting.BackupTypeManual)即触发一次手动类型的备份backupErr : setting.GetSettingManager().Backup(ctx, setting.BackupTypeManual) if backupErr ! nil { c.api.Notify(ctx, backupErr.Error()) } else { c.api.Notify(ctx, i18n.GetI18nManager().TranslateWox(ctx, plugin_backup_success)) }成功时 Wox 会弹出备份成功的系统通知失败时则把错误信息原样通知给你。动作上还设置了PreventHideAfterAction: true即执行备份后搜索窗口不会自动隐藏方便连续操作。2.2 restore —— 从历史快照还原输入restore插件会枚举当前机器上存在的全部备份快照并按时间戳倒序排列最新的排在最前wox.core/plugin/system/backup.go每一条记录渲染为一个结果项标题为序号#1、#2……副标题展示备份类型 - 备份时间slices.SortFunc(backups, func(i, j setting.Backup) int { return int(j.Timestamp - i.Timestamp) })每个还原项提供三个动作wox.core/plugin/system/backup.go动作说明恢复该备份调用setting.GetSettingManager().Restore(ctx, backup.Id)执行还原成功后弹出恢复成功通知并延迟约 2 秒后自动退出 Woxtime.Sleep(2000 * time.Millisecond)后调用ui.GetUIManager().ExitApp(ctx)确保应用以还原后的配置干净重启打开备份文件夹通过shell.Open(backup.Path)在系统文件管理器中打开该快照所在目录便于人工检查或手工拷贝结果项若读取备份列表失败则只返回一个备份读取失败结果项副标题携带具体错误还原是破坏性操作它会用快照内容替换当前用户数据目录。执行前请确认该快照的备份时间与类型避免覆盖掉你近期的新配置。三、备份快照的存储位置与文件结构3.1 目录约定备份快照统一存放在 Wox 数据目录下的backup子目录中该路径由Location.GetBackupDirectory()定义wox.core/util/location.gofunc (l *Location) GetBackupDirectory() string { return path.Join(l.woxDataDirectory, backup) }一次备份的完整流程wox.core/setting/backup_restore.go是以当前系统时间戳毫秒作为备份文件夹名例如woxData/backup/1691234567890使用cp.Copyotiai10/copy 库将整个用户数据目录GetUserDataDirectory()递归复制到备份目录生成一条备份元信息Backup序列化为 JSON 写入快照目录内的backup.json{ Id: uuid, Name: 1691234567890, Timestamp: 1691234567890, Type: manual }异步触发历史备份清理cleanBackups。Backup结构体定义在 wox.core/setting/backup_restore.gotype Backup struct { Id string Name string // backup folder name Timestamp int64 Type BackupType Path string // backup file path }3.2 备份类型BackupType源码定义了三种备份来源wox.core/setting/backup_restore.go类型常量取值触发场景BackupTypeAutoauto设置项自动备份开启后由StartAutoBackup定时循环触发BackupTypeManualmanual用户通过backup命令手动触发BackupTypeUpdateupdateWox 升级前自动备份源码注释backup before update Wox在restore的结果列表中副标题会直接展示该类型字符串如manual - 2026-09-19 04:00:00据此可以区分快照来源。3.3 备份发现与还原前的逃生舱FindAllBackupswox.core/setting/backup_restore.go会扫描backup目录下每个子文件夹跳过以temp_开头的临时目录读取其中的backup.json反序列化为Backup记录并回填真实路径。还原时wox.core/setting/backup_restore.go有一个值得注意的安全设计不会直接覆盖当前数据目录而是先把现有用户数据目录重命名为xxx.before_restore_时间戳重名时自动追加_2、_3等后缀见ensureUniquePath再把备份快照复制回标准位置最后删除还原进来的backup.json。这意味着即使还原失败Restore也会尝试把原目录重新改回来尽可能避免数据丢失还原成功后改名前的目录仍保留在磁盘上可作为最终的兜底副本手动检查或清理。四、自动备份与保留策略4.1 每天一次的自动备份循环设置管理器在启动后会拉起一个常驻 goroutinewox.core/setting/backup_restore.go逻辑如下for range time.NewTimer(24 * time.Hour).C { settings : m.GetWoxSetting(ctx) if !settings.EnableAutoBackup.Get() { continue } backupErr : m.Backup(ctx, BackupTypeAuto) }即每 24 小时检查一次设置项EnableAutoBackup自动备份开启时执行一次auto类型备份。该开关是 Wox 通用设置的一部分定义于 wox.core/setting/wox_setting.go默认值为trueNewWoxSettingValue(store, EnableAutoBackup, true)并在设置界面Data 设置的 Backup 区块暴露为 Automatic backup 选项切换逻辑见 wox.core/ui/launcher/data_settings.go。4.2 最多保留 5 份快照每次备份完成后会异步执行cleanBackupswox.core/setting/backup_restore.go保留策略为最多保留 5 份超出部分按时间戳升序排序后把最旧的快照整目录删除maxBackups : 5 ... slices.SortFunc(backups, func(i, j Backup) int { return int(i.Timestamp - j.Timestamp) }) for i : 0; i len(backups)-maxBackups; i { rmErr : os.RemoveAll(path.Join(util.GetLocation().GetBackupDirectory(), backups[i].Name)) }因此不用担心备份无限堆积磁盘但同时要留意若你期望长期保留某个快照例如升级前迁移场景应在 5 份之外的旧快照被清理前先手动把backup目录中的对应文件夹复制到安全位置。五、进阶建议与注意事项迁移到新机器的标准流程在新机器上先完成一次 Wox 首次配置再用旧机器导出的快照拷贝backup目录中的文件夹或直接复制用户数据目录通过restore还原也可参考 Cloud Sync 实现免手动导出。还原后会自动退出restore成功约 2 秒后 Wox 会自行退出这是为了让设置以完整状态重新加载此时应手动重新启动 Wox 验证效果。更新前备份的保护BackupTypeUpdate表明升级流程在覆盖数据前也会生成快照配合 5 份保留策略可为你提供最近几次升级前的回退点。随时人工确认restore结果项中的打开备份文件夹动作可在还原前直接进入系统文件管理器检查backup.json的Type与Timestamp确认这是你真正想还原的快照。相关源码与文档索引插件实现wox.core/plugin/system/backup.go备份/还原/清理核心逻辑wox.core/setting/backup_restore.go备份目录位置wox.core/util/location.go自动备份设置项wox.core/setting/wox_setting.go设置界面相关wox.core/ui/launcher/data_settings.go官方文档原文www/docs/guide/plugins/system/backup.md替代方案 Cloud Syncwww/docs/guide/plugins/system/cloudsync.md【免费下载链接】WoxA cross-platform launcher that simply works项目地址: https://gitcode.com/gh_mirrors/wo/Wox创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考