系列前几篇聊了怎么搭架构、怎么管文章、怎么做清理。这篇说个实操问题——笔记多了以后,免不了做批量操作。改标签体系、把某个目录搬到别处、给一批笔记加 frontmatter。
手动干的话,改到第 20 篇开始手抖,第 50 篇想删库跑路。
所以核心建议就一条:任何批量操作前,先备份。
先说说最常见的三种场景。
改标签
知识库用久了,标签体系要翻修。比如把「运维」拆成「服务器」和「网络」,或者把随手打的「todo」统一改成「待办」。
Obsidian 本身没有批量改标签的功能。两个替代方案。
方案 A:Find and replace 插件
社区搜「Find and replace in selection」。在搜索框里搜 tag:旧标签,选中全部结果,统一替换。好处是能看到每篇笔记的上下文,不容易误伤。
方案 B:sed 直接改
大部分标签在 Markdown 里就是 tags: [旧标签名] 的格式。可以用 sed:
# 先确认哪些文件受影响 grep -rn "旧标签名" /path/to/vault/ --include="*.md" | head -20 # 确认没问题再执行 sed -i 's/旧标签名/新标签名/g' /path/to/vault/笔记/*.md
有个坑要注意:标签在 frontmatter 里可能是 - "#旧标签" 格式,也可能是行内的 #旧标签。精确匹配会漏。建议先搜全库确认所有出现形式。

移文件
改目录结构是知识库里最容易出事的操作。移动一个文件,引用它的 wikilink 全断。
安全做法分三步:
第一步,查引用。 移动前确认这个目录被哪些文件引用:
grep -rn "\[\[待移目录/" /path/to/vault/ --include="*.md"
记下文件列表。
第二步,移动。 移完后所有 wikilink 变红。用 Obsidian 的「检测文件更改」刷新目录树。
第三步,修引用。 推荐用 sed 批量改:
# 把 [[待移目录/文件名]] 改成 [[新目录/文件名]] sed -i 's/\[\[待移目录\//\[\[新目录\//g' /path/to/vault/笔记/*.md

批量清理空文件和孤岛笔记
知识库用上一年,总有些残留的「空壳笔记」——只有 frontmatter 没有正文的、已经合并到其他笔记的、忘了当初为什么创建的。
清理前跑一遍审计:
# 找正文只有 frontmatter 的文件(少于 5 行)
for f in $(find /path/to/vault/笔记/ -name "*.md"); do
lines=$(wc -l < "$f")
if [ "$lines" -le 5 ]; then
echo "$f — $lines lines"
fi
done
但注意:少于 5 行的不都能删。有些是索引页,只放几个 wikilink 导航,内容不长但有用。
安全删除的检查顺序:
- 确认没有其他文件引用这个文件
- 确认它不是某个系列的索引页
- 如果只是内容过期,加
status: archived标签保留,不要直接删 - 删之前移到
.trash/,观察一周再彻底清掉
三条建议
先备份再动手。 不管多自信,花两分钟打个 tar 包。
先 dry-run 再执行。 把 grep/sed 里的 -i 去掉跑一遍,看输出对不对。
分批操作。 改 1000 个文件别一次性跑完,按目录分批做,每批结束随手验证。

前几篇聊了知识库怎么搭、怎么管、怎么清理、怎么同步。这篇补上批量操作的缺口。系列写了一段时间,各种场景基本覆盖了一遍——下一篇打算做个全景回顾,把 20 多篇串成一张完整地图。