作为一个用了有道云笔记7年的老用户,我从来没想过有一天会如此决绝地离开。事情的导火索是有道云突然宣布限制登录终端数量,这直接触动了我的底线——我的笔记分散在3台电脑、2部手机和1台平板上,这意味着我必须做出选择。
但更深层的原因是,我越来越意识到知识管理工具的核心价值应该是数据自主权。这些年有道云的导出功能一直在缩水,从最初的完整Markdown导出,到现在只能导出PDF,这种趋势让我感到不安。我的2700多篇笔记里,有工作文档、读书笔记、代码片段,甚至还有写了5年的技术博客草稿,这些内容如果被困在一个封闭系统里,风险实在太大了。
Obsidian吸引我的地方在于它基于本地Markdown文件的架构。所有笔记都以纯文本形式存储在我的硬盘上,不用担心服务商突然改变策略。而且它的双向链接和知识图谱功能,让碎片化笔记能真正产生化学反应。我实测发现,当笔记量超过1000篇时,Obsidian的检索和组织效率明显优于传统笔记工具。
迁移大忌就是边导出边修改。我做的第一件事就是卸载所有设备上的有道云客户端,只保留主力机的一个版本用于临时查阅。这个过程有几个细节需要注意:
我专门建了一个Excel表格记录每台设备的处理状态,确保没有遗漏。这个步骤看似简单,但如果漏掉某个终端,可能在迁移过程中造成数据不一致,后期排查会非常麻烦。
在尝试任何第三方工具前,我强烈建议先用有道云自带的导出功能做一次完整备份。虽然它导出的Markdown质量很差(非Markdown笔记会变成PDF),但这个备份有不可替代的价值:
我用Snap2HTML生成整个备份目录的树状图,配合WizTree分析文件类型分布,发现我的笔记中有:
这个分析对后续选择迁移工具很有帮助。
我测试了三个开源迁移工具,最终选择youdaonote-pull的原因很现实:
| 工具名称 | 优点 | 致命缺点 |
|---|---|---|
| YoudaoNoteExport | 支持元数据导出 | 需要Python2环境 |
| NoteExporter | 图形界面操作简单 | 无法处理图片附件 |
| youdaonote-pull | 社区活跃,PR响应快 | 需要手动合并多个PR |
youdaonote-pull虽然初始版本问题很多,但它的GitHub仓库显示最近3个月就有8个合并的PR,这种活跃度给了我信心。事实证明,通过组合几个关键PR,确实能解决大部分迁移痛点。
我最终应用了5个PR才完成完整迁移,每个PR都解决了特定问题:
PR#22 - 老文档导出问题
初始版本只能导出最近30篇笔记,修改len参数后,我的500多篇2016年的老笔记终于能完整导出。但要注意这个值不能太大,我测试发现超过5000会导致内存溢出。
PR#85 - 表格转换问题
有177篇包含表格的笔记转换失败,原因是空单元格处理不当。这个PR通过自动填充空格字符解决了问题,修改后的核心逻辑是:
python复制def fix_empty_cell(table):
return [[cell or ' ' for cell in row] for row in table]
PR#108 - 元数据导出
这是我最看重的功能,它会在生成的Markdown头部添加YAML元数据:
markdown复制---
created: 2020-05-12T14:32:00
modified: 2021-08-23T09:15:00
---
在Obsidian中,这些元数据可以通过Dataview插件直接调用,完美保留了笔记的时间信息。
最棘手的问题是部分图片被识别为octet-stream类型。通过分析HTTP请求,发现是有道云最近修改了CDN策略。解决方案是在下载逻辑中添加MIME类型强制转换:
python复制if content_type == 'application/octet-stream':
# 通过文件魔数判断实际类型
if imghdr.what(None, h=content):
ext = imghdr.what(None, h=content)
else:
ext = 'png' # 默认fallback
有3篇笔记无论如何调整编码都无法正常转换,最终发现是早期版本的有道云使用了非标准的UTF-8编码。我的解决方法是先用二进制模式读取,再尝试多种编码组合:
python复制encodings = ['utf-8', 'gbk', 'gb18030', 'big5']
for enc in encodings:
try:
content = raw_content.decode(enc)
break
except UnicodeDecodeError:
continue
我放弃了有道云原有的文件夹分类,改用Obsidian的标签+链接体系。具体操作:
#migration/有道云标签便于追溯所有附件统一存放在Assets目录下,按年/月分三级子目录。通过如下设置解决链接路径问题:
markdown复制![[Assets/2023/08/image.png]]
完成迁移两周后,我明显感受到这些变化:
最惊喜的是,Obsidian的Daily Notes功能完美继承了我的晨间日记习惯,而且现在能自动关联到相关项目笔记。这次迁移虽然花了3天时间,但从长远看绝对是值得的投资。