知识库批量操作实战:改标签、移文件、做清理,怎么不翻车

系列前几篇聊了怎么搭架构、怎么管文章、怎么做清理。这篇说个实操问题——笔记多了以后,免不了做批量操作。改标签体系、把某个目录搬到别处、给一批笔记加 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 导航,内容不长但有用。

安全删除的检查顺序:

  1. 确认没有其他文件引用这个文件
  2. 确认它不是某个系列的索引页
  3. 如果只是内容过期,加 status: archived 标签保留,不要直接删
  4. 删之前移到 .trash/,观察一周再彻底清掉

三条建议

先备份再动手。 不管多自信,花两分钟打个 tar 包。

先 dry-run 再执行。 把 grep/sed 里的 -i 去掉跑一遍,看输出对不对。

分批操作。 改 1000 个文件别一次性跑完,按目录分批做,每批结束随手验证。

批量操作三条铁律

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

发表评论

您的邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部