迁移指南
📦 从其他笔记软件迁移到 Obsidian 的完整指南,支持 Notion、Logseq、Roam Research 等主流工具。
概述
Obsidian 支持标准 Markdown 格式,大多数笔记软件的数据都可以迁移。本文介绍:
- 各平台的迁移方法
- 格式转换技巧
- 迁移后的整理工作
从 Notion 迁移
方法一:官方导出
- 在 Notion 中打开要导出的页面
- 点击右上角
...→Export - 选择格式:
Markdown & CSV - 勾选
Include subpages和Create folders for subpages - 下载并解压 ZIP 文件
方法二:使用转换工具
推荐工具:Notion2Obsidian
- 在 Obsidian 安装「Importer」插件
- 打开命令面板,搜索
Importer: Import from Notion - 选择导出的 ZIP 文件
- 配置转换选项
Notion 格式转换
| Notion 元素 | Obsidian 对应 |
|---|---|
| 数据库 | Markdown 表格或 Dataview |
| Callout | > [!note] 格式 |
| Toggle | 折叠列表 |
| Gallery | 无直接对应,可用卡片视图 |
| Bookmark | 外部链接 |
| Embed | iframe 或链接 |
| 公式块 | $...$ 或 $$...$$ |
数据库迁移方案
简单数据库 → Markdown 表格:
markdown
| 任务 | 状态 | 截止日期 |
|------|------|----------|
| 任务1 | 进行中 | 2024-02-01 |
| 任务2 | 待办 | 2024-02-15 |复杂数据库 → Dataview:
markdown
---
type: task
status: in-progress
due: 2024-02-01
---
# 任务1
任务描述...dataview
TABLE status, due
FROM "tasks"
WHERE status = "in-progress"处理 Notion 特有元素
markdown
<!-- Notion Callout -->
> 💡 **提示**
> 这是 Notion 风格的 Callout
<!-- 转换为 Obsidian Callout -->
> [!tip] 提示
> 这是 Obsidian 风格的 Calloutmarkdown
<!-- Notion Toggle -->
- <details>
<summary>点击展开</summary>
隐藏内容
</details>
<!-- 转换为 Obsidian 折叠 -->
- 点击展开
- 隐藏内容从 Logseq 迁移
Logseq 特点
- 使用 Org-mode 或 Markdown 格式
- 大纲式笔记结构
- 每日笔记为主
迁移步骤
- 打开 Logseq 设置
- 导出为 Markdown
- 将文件复制到 Obsidian 仓库
格式转换
大纲转标题:
markdown
<!-- Logseq 格式 -->
- 主题
- 子主题
- 内容
<!-- 转换为 Markdown -->
## 主题
### 子主题
内容块引用:
markdown
<!-- Logseq -->
((block-id))
<!-- Obsidian -->
![[笔记#段落]]标签:
markdown
<!-- Logseq -->
#标签
<!-- Obsidian(相同) -->
#标签TODO:
markdown
<!-- Logseq -->
DONE 已完成任务
TODO 待办任务
DOING 进行中
LATER 稍后
<!-- Obsidian -->
- [x] 已完成任务
- [ ] 待办任务
- [ ] 进行中
- [ ] 稍后使用脚本转换
python
# logseq_to_obsidian.py
import re
import os
def convert_logseq_to_obsidian(content):
# 转换 TODO 状态
content = re.sub(r'^DONE ', '- [x] ', content, flags=re.MULTILINE)
content = re.sub(r'^TODO ', '- [ ] ', content, flags=re.MULTILINE)
content = re.sub(r'^DOING ', '- [ ] ', content, flags=re.MULTILINE)
content = re.sub(r'^LATER ', '- [ ] ', content, flags=re.MULTILINE)
# 转换块引用
content = re.sub(r'\(\(([a-z0-9-]+)\)\)', r'[[#\1]]', content)
return content
# 批量处理
for file in os.listdir('logseq-notes'):
if file.endswith('.md'):
with open(f'logseq-notes/{file}', 'r') as f:
content = f.read()
converted = convert_logseq_to_obsidian(content)
with open(f'obsidian-notes/{file}', 'w') as f:
f.write(converted)从 Roam Research 迁移
导出数据
- 登录 Roam Research
- 点击右上角
...→Export All - 选择
Markdown格式 - 下载 JSON 文件
格式转换
双向链接:
markdown
<!-- Roam -->
[[笔记名称]]
<!-- Obsidian(相同) -->
[[笔记名称]]块引用:
markdown
<!-- Roam -->
((block-id))
<!-- Obsidian -->
![[笔记#段落]]属性:
markdown
<!-- Roam -->
Author:: 张三
Date:: 2024-01-15
<!-- Obsidian -->
---
author: 张三
date: 2024-01-15
---标签:
markdown
<!-- Roam -->
#标签
<!-- Obsidian(相同) -->
#标签使用工具转换
- 安装 Obsidian Importer 插件
- 选择 Roam Research JSON 导出文件
- 配置转换选项
从 Evernote 迁移
导出数据
- 下载 Evernote 客户端
- 选择要导出的笔记本
- 右键 →
导出为 ENEX - 保存文件
使用工具转换
推荐:Yarle
bash
# 安装 Yarle
npm install -g yarle-evernote2md
# 转换
yarle --configFile config.json配置文件示例:
json
{
"source": "./evernote.enex",
"outputDir": "./obsidian-notes",
"skipWebClips": true,
"useHashTags": true,
"skipCreationTime": false,
"skipUpdateTime": false,
"keepOriginalHtml": false
}处理特殊内容
| Evernote 元素 | Obsidian 对应 |
|---|---|
| 笔记本 | 文件夹 |
| 标签 | #标签 |
| 附件 | 复制到附件文件夹 |
| Web Clip | 外部链接 |
| 提醒 | 任务 + 日期属性 |
从 Apple Notes 迁移
macOS 导出
- 打开 Apple Notes
- 选择要导出的笔记
文件→导出为 PDF或拖拽到 Finder
使用工具
- 安装 Obsidian Importer 插件
- 选择
Import from Apple Notes - 选择要导入的笔记
手动迁移
bash
# Apple Notes 存储位置
~/Library/Group Containers/group.com.apple.notes/
# 可使用脚本提取从 OneNote 迁移
导出数据
- 打开 OneNote
- 选择要导出的笔记本
文件→导出→笔记本→Markdown- 保存文件
使用工具
bash
# 安装工具
dotnet tool install --global OneNoteMdExporter
# 导出
onemd export -f "笔记本名称" -o ./obsidian-notes格式转换
| OneNote 元素 | Obsidian 对应 |
|---|---|
| 分区 | 文件夹 |
| 页面 | Markdown 文件 |
| 标签 | #标签 |
| 表格 | Markdown 表格 |
| 图片 | 附件 |
迁移后整理
1. 整理文件结构
迁移后的仓库/
├── inbox/ # 临时存放待整理笔记
├── archive/ # 存放不再活跃的笔记
├── templates/ # 模板文件
└── notes/ # 整理后的笔记
├── projects/
├── knowledge/
└── daily/2. 统一命名规范
bash
# 使用脚本批量重命名
for file in *.md; do
# 移除特殊字符
newname=$(echo "$file" | sed 's/[[:space:]]/_/g' | sed 's/[^a-zA-Z0-9._-]//g')
mv "$file" "$newname"
done3. 添加 Front Matter
使用 Templater 批量添加:
markdown
---
title: {{title}}
created: {{date}}
tags: []
source: "从 Notion 迁移"
---
{{content}}4. 修复链接
python
# 修复损坏的链接
import re
def fix_links(content):
# 修复 Notion 风格链接
content = re.sub(r'\[([^\]]+)\]\(([^)]+)\.md\)', r'[[\2|\1]]', content)
# 修复空格问题
content = content.replace('%20', ' ')
return content5. 重建标签系统
dataview
# 查看所有标签
LIST
FROM ""
WHERE length(file.tags) > 0
GROUP BY file.tags📋 迁移检查清单
markdown
## 迁移前
- [ ] 备份原始数据
- [ ] 记录现有组织结构
- [ ] 列出需要保留的功能
- [ ] 确定目标仓库结构
## 迁移中
- [ ] 导出原始数据
- [ ] 运行转换工具
- [ ] 复制到 Obsidian 仓库
- [ ] 检查格式转换结果
## 迁移后
- [ ] 修复损坏的链接
- [ ] 整理文件结构
- [ ] 统一命名规范
- [ ] 添加标签和属性
- [ ] 配置插件和工作流
- [ ] 测试搜索功能
- [ ] 建立新的笔记习惯⚠️ 常见问题
链接失效
问题:迁移后内部链接无法跳转
解决:
- 检查文件名是否变化
- 使用「修复链接」插件
- 手动修复关键链接
图片丢失
问题:图片无法显示
解决:
- 确保图片文件夹正确复制
- 检查图片引用路径
- 使用相对路径或绝对路径
格式错乱
问题:Markdown 格式显示异常
解决:
- 检查编码是否为 UTF-8
- 修复不兼容的语法
- 使用 Linter 插件格式化
数据库丢失
问题:Notion 数据库无法正确迁移
解决:
- 导出为 CSV 格式
- 手动重建表格
- 使用 Dataview 替代