三年前从 Obsidian 搬到 Notion,三年后又搬回来。这次搬家花了四个小时,比预期多一倍。

不是因为操作复杂,是因为 Notion 的导出质量太差,清理数据占了三小时。

这篇不是工具横评,是一次具体迁移的操作记录。如果你也想从 Notion 搬出来,照着做能少踩几个坑。

第一步,导出

Notion 的导出功能给两个选项,Markdown 和 HTML。选了 Markdown,下载下来一个 zip。

解压后第一眼就知道麻烦来了,

  • 文件名里带特殊字符的全部乱码,产品需求文档/PRD v2.0.md 变成了 PRD%20v2%2E0%20%E4%BA%A7%E5%93%81.md
  • 附件(图片、PDF)散落在各个目录里,有些链接断了
  • 数据库视图导出成了独立的 CSV,和正文完全脱节
  • 内部链接(Notion 的 mention)全部变成了纯文本,跳转关系全丢了

800 多个 block 的工作区,导出来能直接用的不到 70%。

第二步,修文件名

写了个 Python 脚本批量 URL decode 文件名,

import os
import urllib.parse

for root, dirs, files in os.walk('.'):
    for name in files + dirs:
        decoded = urllib.parse.unquote(name)
        if decoded != name:
            old_path = os.path.join(root, name)
            new_path = os.path.join(root, decoded)
            os.rename(old_path, new_path)

跑完之后文件名正常了,但目录结构还是乱的。Notion 的数据库页面导出后会多一层 hash 目录,比如 a1b2c3d4/,里面放着一个 index.md 和相关附件。这些 hash 目录名没有任何意义,需要手动重命名。

200 多个目录,手动改了半小时。

第三步,修链接

Notion 的内部链接导出后变成纯文本,比如 @张三 或 页面标题,没有对应的 Markdown 链接。

我用 Obsidian 打开整个文件夹,利用它的双链功能重建关联。具体做法,

  • 搜索每个页面标题,看哪些页面提到了它
  • 手动把纯文本改成 [[页面标题]] 格式
  • 附件引用路径从相对路径改成 Obsidian 的 ![[文件名]] 格式

这一步最耗时,两小时。300 多条链接,一条一条改。

如果是纯文本笔记没有大量内部链接,这步可以跳过。

第四步,重建数据库

Notion 的数据库是核心功能,导出后变成 CSV + 独立的 Markdown 文件,关联全断了。

我的做法是用 Obsidian 的 Dataview 插件替代。原 Notion 数据库的每个属性变成 frontmatter 字段,

---
status: done
priority: high
tags: [项目A, 后端]
created: 2024-03-15
---

Dataview 查询替代 Notion 的筛选视图,

TABLE status, priority, created
FROM "projects"
WHERE status = "done"
SORT priority DESC

不如 Notion 直观,但够用。关键是数据在 Markdown 文件里,Dataview 只是查询层,插件哪天不能用了,文件还在。

第五步,配置同步

Git 做版本控制,本地 repo + Gitea 远程备份。

Syncthing 做设备同步,手机和电脑点对点,不经过第三方服务器。配置很简单,选一个共享文件夹,两边都装 Syncthing,自动发现。

有个坑,Syncthing 同步 .obsidian 配置目录时,不同设备的插件配置会打架。解法,在 .stignore 里排除 .obsidian/workspace.json,这个文件包含窗口布局和打开的标签页,每台设备应该独立维护。

搬完之后的感受

最大的变化不是功能层面,是心理层面的。

Notion 里每次新建页面都有一种”正式感”,要选数据库、填属性、考虑放在哪个层级。这种仪式感在用 Notion 初期很好,时间长了反而成了阻力。

Obsidian 里 Ctrl+N 直接开写,不选位置、不填属性、不思考层级。先写下来,整理的事以后再说。

延迟也消失了。Notion 打开半秒、新建页面半秒、搜索一秒。Obsidian 全部瞬时。这点延迟差异在单次操作时感受不到,一天记十次笔记就差了二十多秒,够打断”随手记一笔”的冲动。

搬迁清单

如果你也要搬,按这个顺序来,

  1. Notion 里先整理,删掉不需要的页面,减少导出量
  2. 导出 Markdown,解压
  3. 跑 URL decode 脚本修文件名
  4. 手动整理 hash 目录名
  5. 用 Obsidian 打开文件夹,重建双链
  6. 数据库属性转 frontmatter,Dataview 替代视图
  7. Git init,推到远程
  8. Syncthing 配设备同步,.stignore 排除 workspace.json

整个过程,页面少的话两小时,多了半天。比从 Notion 导出后花时间骂 Notion 强。

继续阅读Continue Reading

关于本文About

评论Comments

留下你的想法

欢迎在下方评论区留下你的看法,一起把话题聊得更深。

COMMENTS