Buku 书签管理完全指南 / 第 05 章:标签管理
第 05 章:标签管理
掌握 Buku 的标签系统,包括自动标签、层级标签、标签搜索和批量操作。
5.1 标签基础
Buku 标签格式
Buku 使用独特的标签格式:所有标签以逗号分隔,且整个标签字符串的首尾都带有逗号。
标签存储格式:,tag1,tag2,tag3,
示例:
,bookmark,cli,python,open-source,
,tutorial,web,javascript,frontend,
,research,ai,machine-learning,
标签命名规范
# ✅ 正确的标签格式
buku -a https://example.com "标题" ,python,tutorial,beginner
buku -a https://example.com "标题" ,web-dev,frontend,react
buku -a https://example.com "标题" ,2024/review,favorite
# ⚠️ 注意事项
# 1. 标签不区分大小写
buku -a https://example.com "标题" ,Python # 存储为 python
buku -a https://example.com "标题" ,PYTHON # 存储为 python
# 2. 标签中的空格会被保留
buku -a https://example.com "标题" ,web dev # 标签为 "web dev"
buku -a https://example.com "标题" ,web-dev # 标签为 "web-dev"(推荐)
# 3. 标签支持 Unicode 字符
buku -a https://example.com "标题" ,编程,教程,入门
查看所有标签
# 列出所有标签及其使用次数
buku --stag
# 输出示例:
# 15 python
# 12 tutorial
# 8 web
# 6 javascript
# 5 reference
# 3 bookmark
# 2 cli
# 仅列出标签名称
buku --stag | awk '{print $2}'
# 统计标签总数
buku --stag | wc -l
5.2 标签操作
添加标签
# 添加书签时指定标签
buku -a https://example.com "标题" ,tag1,tag2,tag3
# 为现有书签添加标签
buku -u 1 + ,newtag # 添加单个标签
buku -u 1 + ,tag1,tag2 # 添加多个标签
# 批量添加标签
for id in 1 3 5 7; do
buku -u "$id" + ,reviewed
done
删除标签
# 从书签中删除标签
buku -u 1 - ,oldtag # 删除单个标签
buku -u 1 - ,tag1,tag2 # 删除多个标签
# 清除书签的所有标签
buku -u 1 ,
# 批量删除标签
for id in $(buku -s ,deprecated | grep "^[0-9]" | awk '{print $1}' | tr -d '.'); do
buku -u "$id" - ,deprecated
done
替换标签
# 替换书签的所有标签(删除旧标签,设置新标签)
buku -u 1 ,newtag1,newtag2
# 注意:这会清除所有现有标签,仅保留新标签
# 如果只是想修改某个标签,请使用 + 和 - 操作组合
重命名标签(全局)
# 全局重命名标签
buku --stag oldname newname
# 示例:将 "js" 重命名为 "javascript"
buku --stag js javascript
# 重命名后,所有包含 "js" 标签的书签都会被更新
删除标签(全局)
# 从所有书签中删除特定标签
buku --stag oldname
# 示例:删除 "deprecated" 标签
buku --stag deprecated
# ⚠️ 注意:这会从所有书签中移除该标签
5.3 自动标签
自动标签功能概述
Buku 支持基于 URL 模式的自动标签功能,可以在添加书签时自动应用预定义的标签。
# 自动标签配置文件位置
~/.config/buku/auto_tag
# 文件格式:每行一个规则
# URL 模式 标签列表
# 使用空格或制表符分隔
配置自动标签
# 创建自动标签配置
mkdir -p ~/.config/buku
cat > ~/.config/buku/auto_tag << 'EOF'
github.com ,github,code,git
stackoverflow.com ,stackoverflow,programming,q&a
docs.python.org ,python,doc,reference
developer.mozilla.org ,mdn,web,reference,documentation
arxiv.org ,research,paper,academic
youtube.com ,video,tutorial
medium.com ,article,blog
news.ycombinator.com ,news,tech,hacker-news
reddit.com ,social,community
gitlab.com ,gitlab,code,git
EOF
自动标签的使用
# 添加包含自动标签匹配域名的书签
buku -a https://github.com/jarun/buku "Buku 项目"
# 自动应用标签:,github,code,git,bookmark
# 手动标签与自动标签合并
buku -a https://github.com/jarun/buku "Buku 项目" ,python,cli
# 最终标签:,github,code,git,bookmark,python,cli
# 查看自动标签配置
cat ~/.config/buku/auto_tag
自动标签规则语法
# 规则格式:
# <URL 模式> <标签列表>
#
# URL 模式:
# - 支持通配符 *
# - 支持正则表达式(以 / 开头)
#
# 标签列表:
# - 以逗号开头
# - 多个标签用逗号分隔
# - 结尾无逗号
# 示例规则:
github.com ,github,code
*.github.io ,github-pages,blog
docs.*.org ,documentation
/arxiv\.org\/abs/ ,research,paper
高级自动标签规则
cat > ~/.config/buku/auto_tag << 'EOF'
# GitHub 相关
github.com ,github,code,git
*.github.io ,github-pages,blog,portfolio
gist.github.com ,github,gist,snippet
# 文档站点
docs.python.org ,python,doc,reference
doc.rust-lang.org ,rust,doc,reference
go.dev/doc ,golang,doc,reference
developer.mozilla.org ,mdn,web,reference
docs.microsoft.com ,microsoft,doc
# 学习资源
coursera.org ,course,online-learning
udemy.com ,course,online-learning
khanacademy.org ,course,online-learning
freecodecamp.org ,tutorial,programming,free
# 技术社区
stackoverflow.com ,stackoverflow,programming,q&a
news.ycombinator.com ,news,tech,hacker-news
reddit.com/r/programming ,reddit,programming
dev.to ,blog,programming,community
medium.com ,article,blog
# 学术资源
arxiv.org ,research,paper,academic
scholar.google.com ,research,academic,search
ieee.org ,research,paper,ieee
acm.org ,research,paper,acm
# 工具和服务
notion.so ,tool,productivity,notes
trello.com ,tool,project-management
figma.com ,tool,design,ui
EOF
5.4 层级标签
层级标签概念
虽然 Buku 原生不支持层级标签(如文件夹结构),但可以通过命名约定实现类似效果。
层级标签命名约定:
<大类>/<子类>/<具体标签>
示例:
,tech/python/web/django,
,tech/python/web/flask,
,tech/python/ml/tensorflow,
,tech/rust/web/actix,
,lang/zh/mandarin,
,lang/en/business,
,project/website/blog,
,project/api/rest,
使用层级标签
# 添加带层级标签的书签
buku -a https://djangoproject.com "Django" ,tech/python/web/django
buku -a https://flask.palletsprojects.com "Flask" ,tech/python/web/flask
buku -a https://www.tensorflow.org "TensorFlow" ,tech/python/ml/tensorflow
# 搜索大类
buku -s ,tech
# 结果: 匹配所有 tech 开头的标签
# 搜索子类
buku -s ,tech/python
# 结果: 匹配所有 tech/python 开头的标签
# 搜索具体标签
buku -s ,tech/python/web
# 结果: 匹配所有 tech/python/web 的书签
# 搜索特定技术
buku -s ,tech/python/web/django
# 结果: 仅匹配 Django 相关书签
层级标签的优势
┌────────────────────────────────────────────────────────────┐
│ 层级标签示意结构 │
├────────────────────────────────────────────────────────────┤
│ │
│ tech/ │
│ ├── python/ │
│ │ ├── web/ │
│ │ │ ├── django │
│ │ │ ├── flask │
│ │ │ └── fastapi │
│ │ ├── ml/ │
│ │ │ ├── tensorflow │
│ │ │ ├── pytorch │
│ │ │ └── scikit-learn │
│ │ └── tools/ │
│ │ ├── pytest │
│ │ └── black │
│ ├── rust/ │
│ │ ├── web/ │
│ │ │ └── actix │
│ │ └── systems/ │
│ │ └── tokio │
│ └── javascript/ │
│ ├── frontend/ │
│ │ ├── react │
│ │ └── vue │
│ └── backend/ │
│ └── node │
│ │
│ 优点: │
│ - 支持任意深度的层级结构 │
│ - 搜索父级自动包含所有子级 │
│ - 兼容 Buku 的标签搜索机制 │
│ - 便于快速浏览和分类管理 │
└────────────────────────────────────────────────────────────┘
层级标签最佳实践
# 1. 保持层级一致性
# ✅ 推荐:统一使用 3-4 级
,tech/python/web/django,
,tech/rust/systems/tokio,
# ❌ 不推荐:层级不一致
,tech/python/django, # 3 级
,tech/rust/web/backend/actix, # 5 级
# 2. 使用简洁的标签名
# ✅ 推荐
,tech/python/web/django,
# ❌ 不推荐
,technology/python-programming/web-development/django-framework,
# 3. 避免过深的层级
# ✅ 推荐:最多 4 级
,tech/python/web/django,
# ❌ 不推荐:超过 4 级
,tech/python/web/backend/django/rest-framework/serializers,
5.5 批量标签操作
批量添加标签
# 为搜索结果添加标签
# 方法一:循环处理
buku -s python | grep "^[0-9]" | awk '{print $1}' | tr -d '.' | while read id; do
buku -u "$id" + ,programming
done
# 方法二:使用 xargs
buku -j -s python | jq -r '.[].id' | xargs -I {} buku -u {} + ,programming
# 为特定范围的书签添加标签
for id in $(seq 1 100); do
buku -u "$id" + ,legacy 2>/dev/null
done
批量删除标签
# 从所有书签中删除特定标签
buku --stag deprecated
# 从搜索结果中删除标签
buku -s ,old-tag | grep "^[0-9]" | awk '{print $1}' | tr -d '.' | while read id; do
buku -u "$id" - ,old-tag
done
批量重命名标签
# 使用 Buku 内置功能
buku --stag old-name new-name
# 或使用脚本进行更复杂的重命名
# 例如:将 "python3" 和 "py3" 都统一为 "python"
buku --stag python3 python
buku --stag py3 python
批量标签清理脚本
#!/bin/bash
# cleanup_tags.sh - 清理和标准化标签
echo "=== 标签清理工具 ==="
echo ""
# 1. 显示所有标签及使用次数
echo "当前标签列表:"
buku --stag
echo ""
# 2. 合并相似标签
echo "合并相似标签..."
buku --stag js javascript 2>/dev/null
buku --stag py python 2>/dev/null
buku --stag rb ruby 2>/dev/null
buku --stag golang go 2>/dev/null
# 3. 删除空标签(如果存在)
# Buku 通常不会创建空标签,但可以检查
# 4. 显示清理后的标签
echo ""
echo "清理后的标签列表:"
buku --stag
echo ""
echo "清理完成!"
5.6 标签策略
推荐标签分类体系
┌────────────────────────────────────────────────────────────┐
│ 推荐标签分类体系 │
├────────────────────────────────────────────────────────────┤
│ │
│ 📂 主题分类 │
│ ├── tech 技术相关 │
│ ├── science 科学 │
│ ├── business 商业 │
│ ├── art 艺术 │
│ └── news 新闻 │
│ │
│ 🔧 技术栈 │
│ ├── python, javascript, rust, go, java, c++ │
│ ├── react, vue, angular, svelte │
│ ├── django, flask, fastapi, express │
│ ├── postgresql, mysql, mongodb, redis │
│ └── docker, kubernetes, aws, gcp, azure │
│ │
│ 📋 用途标记 │
│ ├── reference 参考文档 │
│ ├── tutorial 教程 │
│ ├── tool 工具 │
│ ├── library 库/框架 │
│ ├── article 文章 │
│ ├── video 视频 │
│ └── paper 学术论文 │
│ │
│ ⏰ 状态标记 │
│ ├── toread 待阅读 │
│ ├── reading 阅读中 │
│ ├── read 已阅读 │
│ ├── favorite 收藏 │
│ ├── archived 已归档 │
│ └── starred 星标 │
│ │
│ 📅 时间标记 │
│ ├── 2024, 2025, 2026 年份 │
│ └── q1, q2, q3, q4 季度 │
│ │
│ 🏢 来源标记 │
│ ├── github, gitlab 代码托管 │
│ ├── medium, dev.to 博客平台 │
│ ├── stackoverflow 问答社区 │
│ └── arxiv 学术平台 │
│ │
└────────────────────────────────────────────────────────────┘
标签命名约定
| 类别 | 命名格式 | 示例 |
|---|---|---|
| 编程语言 | 小写全称 | python, javascript, rust |
| 框架 | 小写全称 | django, react, flask |
| 工具 | 小写全称 | docker, git, vim |
| 文档类型 | 小写英文 | doc, tutorial, reference |
| 状态 | 小写英文 | toread, archived, favorite |
| 层级 | 斜杠分隔 | tech/python/web/django |
标签数量建议
# 每个书签建议标签数量:3-7 个
# ✅ 推荐
buku -a URL "标题" ,python,web,tutorial,reference
# ❌ 不推荐:标签过多
buku -a URL "标题" ,python,programming,language,code,web,tutorial,beginner,2024,useful
# ❌ 不推荐:标签过少
buku -a URL "标题" ,bookmark
5.7 标签统计与分析
标签使用统计
#!/bin/bash
# tag_analysis.sh - 标签使用分析
echo "=== Buku 标签分析报告 ==="
echo ""
# 总书签数
total=$(buku -p | grep -c "^[0-9]")
echo "总书签数: $total"
echo ""
# 标签统计
echo "标签使用排行 (Top 20):"
echo "----------------------"
buku --stag | head -20
echo ""
# 无标签书签数
untagged=$(buku -j | jq '[.[] | select(.tags == "," or .tags == "")] | length')
echo "无标签书签: $untagged"
# 标签种类数
tag_count=$(buku --stag | wc -l)
echo "标签种类数: $tag_count"
# 平均每书签标签数
avg_tags=$(buku -j | jq '[.[] | .tags | split(",") | length - 2] | add / length')
echo "平均标签数: $avg_tags"
可视化标签分布
#!/bin/bash
# tag_distribution.sh - 标签分布可视化
echo "=== 标签分布图 ==="
echo ""
buku --stag | while read count tag; do
bar=$(printf '%*s' "$count" '' | tr ' ' '█')
printf "%-20s %s (%d)\n" "$tag" "$bar" "$count"
done | sort -t'(' -k2 -rn | head -30
5.8 常见标签操作速查
| 操作 | 命令 | 示例 |
|---|---|---|
| 查看所有标签 | buku --stag | 显示标签列表及计数 |
| 添加标签 | buku -u ID + ,tag | buku -u 1 + ,python |
| 删除标签 | buku -u ID - ,tag | buku -u 1 - ,old |
| 替换标签 | buku -u ID ,tags | buku -u 1 ,new1,new2 |
| 全局重命名 | buku --stag old new | buku --stag js javascript |
| 全局删除 | buku --stag tag | buku --stag deprecated |
| 标签搜索 | buku -s ,tag | buku -s ,python |
| 精确标签搜索 | buku -st ,tag | buku -st ,python |
| 排除标签 | buku -s kw -x ,tag | buku -s py -x ,old |
5.9 本章小结
| 要点 | 说明 |
|---|---|
| 标签格式 | 以逗号开头,逗号分隔,首尾带逗号 |
| 自动标签 | 通过 ~/.config/buku/auto_tag 配置 URL 模式匹配 |
| 层级标签 | 使用斜杠分隔实现层级结构,如 tech/python/web |
| 批量操作 | buku --stag 进行全局标签操作 |
| 标签策略 | 建议每书签 3-7 个标签,保持一致性 |
扩展阅读
下一章:第 06 章:导入导出 — 学习在不同格式和平台之间迁移书签数据。