Buku 书签管理完全指南 / 第 03 章:基本操作
第 03 章:基本操作
掌握 Buku 的核心书签管理操作:添加、搜索、打开、删除和更新书签。
3.1 添加书签
基本语法
# 最简单的添加方式
buku -a https://example.com
# 添加书签并指定标题
buku -a https://example.com "示例网站"
# 添加书签并指定标题和标签
buku -a https://example.com "示例网站" ,tag1,tag2
# 添加书签并指定描述
buku -a https://example.com "示例网站" ,tag1,tag2 --desc "这是描述"
标签格式规范
# 标签以逗号开头,多个标签用逗号分隔
# 正确格式:
buku -a https://example.com "标题" ,python,tutorial,beginner
# 错误格式(不会被识别为标签):
buku -a https://example.com "标题" python tutorial # 不会添加标签
# 空标签(不添加任何标签)
buku -a https://example.com "标题"
# 单个标签
buku -a https://example.com "标题" ,bookmark
# 多个标签(无空格)
buku -a https://example.com "标题" ,tag1,tag2,tag3
添加书签的高级选项
# 自动获取网页标题(需要 requests 和 beautifulsoup4)
buku -a https://example.com # 不指定标题时自动获取
# 强制自动获取标题(即使指定了标题)
buku -a https://example.com "" ,tag1 # 空标题触发自动获取
# 添加时不打开编辑器
buku -a https://example.com "标题" ,tag1 --noconfirm
批量添加书签
# 从文件批量添加
# urls.txt 内容:
# https://example1.com 标题1 ,tag1
# https://example2.com 标题2 ,tag2
while IFS=' ' read -r url title tags; do
buku -a "$url" "$title" "$tags"
done < urls.txt
# 从 URL 列表添加(自动生成标题)
while read -r url; do
buku -a "$url"
done < url_list.txt
3.2 查看书签
列出所有书签
# 列出所有书签(带编号)
buku -p
# 输出示例:
# 1. Buku - 命令行书签管理器
# https://github.com/jarun/buku
# 标签: ,bookmark,cli,python,
#
# 2. Python 官方文档
# https://docs.python.org
# 标签: ,python,doc,reference,
查看特定书签
# 查看第 N 条书签
buku -p 1 # 查看第 1 条
buku -p 1 3 5 # 查看第 1、3、5 条
buku -p 1-5 # 查看第 1 到 5 条
# 仅输出 URL
buku -f 4 1 # 输出第 1 条的 URL
buku -f 4 # 输出所有书签的 URL
# 输出格式选项
buku -f 1 # 输出格式:ID. URL
buku -f 2 # 输出格式:URL (标题)
buku -f 3 # 输出格式:ID. URL (标题)
buku -f 4 # 输出格式:仅 URL
buku -f 5 # 输出格式:URL 标签
以 JSON 格式输出
# JSON 格式输出(便于脚本处理)
buku -j -p 1 # 输出第 1 条为 JSON
buku -j # 输出所有书签为 JSON
# JSON 输出示例:
# [
# {
# "id": 1,
# "url": "https://github.com/jarun/buku",
# "metadata": "Buku - 命令行书签管理器",
# "tags": ",bookmark,cli,python,",
# "description": ""
# }
# ]
# 使用 jq 处理 JSON 输出
buku -j | jq '.[] | {url, metadata}' # 提取 URL 和标题
buku -j | jq '[.[] | select(.tags | contains(",python,"))]' # 筛选含 python 标签的
3.3 搜索书签
基本搜索
# 搜索标题和 URL 中包含关键词的书签
buku -s python
# 搜索多个关键词(AND 逻辑)
buku -s python tutorial
# 搜索标签
buku -s ,python # 标签精确匹配(逗号开头)
# 搜索特定标签下的所有书签
buku -st ,python # -st 仅搜索标签
搜索选项
# 忽略大小写搜索(默认行为)
buku -s Python
# 正则表达式搜索
buku -s "/python|golang/" # 搜索 python 或 golang
buku -s "/https:\/\/github/" # 搜索 GitHub URL
# 模糊搜索(允许拼写错误)
buku -S "pythn" # -S 为模糊搜索
# 搜索并排除标签
buku -s python -x ,archive # 搜索 python 但排除 archive 标签
搜索结果处理
# 搜索并在浏览器中打开第一个结果
buku -s python -o 1
# 搜索结果以 JSON 格式输出
buku -j -s python
# 搜索结果计数
buku -s python | grep -c "^[0-9]"
# 搜索并高亮显示关键词
buku -s python | grep --color=auto "python"
3.4 打开书签
在浏览器中打开
# 打开第 N 条书签
buku -o 1 # 打开第 1 条
buku -o 1 3 5 # 打开第 1、3、5 条
buku -o 1-5 # 打开第 1 到 5 条
# 打开搜索结果中的书签
buku -s python -o 1 # 搜索 python 并打开第一条匹配结果
# 在特定浏览器中打开
BROWSER=firefox buku -o 1
BROWSER="google-chrome --new-window" buku -o 1
获取 URL
# 获取第 N 条书签的 URL
buku --url 1 # 输出: https://github.com/jarun/buku
# 使用 xdg-open 打开(Linux)
xdg-open $(buku --url 1)
# 使用 curl 测试 URL 有效性
curl -o /dev/null -s -w "%{http_code}" $(buku --url 1)
3.5 更新书签
更新标题
# 更新第 N 条书签的标题
buku -u 1 --title "新标题"
# 使用外部编辑器编辑
buku -u 1 -e # 打开编辑器
更新 URL
# 更新 URL
buku -u 1 --url https://new-url.com
更新描述
# 添加或更新描述
buku -u 1 --desc "这是书签描述"
标签操作
# 添加标签
buku -u 1 + ,newtag # 添加单个标签
buku -u 1 + ,tag1,tag2 # 添加多个标签
# 删除标签
buku -u 1 - ,oldtag # 删除单个标签
buku -u 1 - ,tag1,tag2 # 删除多个标签
# 替换标签(删除所有旧标签,添加新标签)
buku -u 1 ,newtag1,newtag2 # 注意:没有 + 或 - 前缀
# 清除所有标签
buku -u 1 ,
更新的交互模式
# 使用 -u 不带参数时进入交互模式
buku -u 1
# 交互式编辑提示:
# URL [https://example.com]: (直接回车保留,或输入新 URL)
# Title [旧标题]: 新标题
# Description []: 新描述
# Tags [,oldtag,]: ,newtag1,newtag2,
3.6 删除书签
删除单条书签
# 删除第 N 条书签
buku -d 1 # 删除第 1 条
# 删除并确认
buku -d 1 # 会提示确认
批量删除
# 删除多条书签
buku -d 1 3 5 # 删除第 1、3、5 条
buku -d 1-5 # 删除第 1 到 5 条
buku -d 1-3 7 9-11 # 删除第 1-3、7、9-11 条
# 删除所有书签(危险操作!)
buku -d # 不带参数,会提示确认
删除策略
# 先搜索再删除
# 1. 搜索包含特定标签的书签
buku -s ,oldtag
# 2. 确认后删除(使用搜索结果的编号)
buku -d 5 12 23
# 删除重复书签(脚本示例)
buku -j | jq -r '.[].url' | sort | uniq -d | while read url; do
echo "重复的 URL: $url"
# 获取该 URL 的所有 ID
ids=$(buku -j | jq -r --arg url "$url" '.[] | select(.url == $url) | .id')
# 保留第一个,删除其余
first=true
for id in $ids; do
if $first; then
first=false
else
buku -d "$id"
fi
done
done
3.7 排序与导出
排序书签
# 按 ID 排序(默认)
buku -p
# 按 URL 排序
buku -p --sort url
# 按标题排序
buku -p --sort title
# 按标签排序
buku -p --sort tags
快速导出
# 导出为 HTML(浏览器可导入格式)
buku -e bookmarks.html
# 导出为 Markdown
buku -e bookmarks.md
# 导出为 Org 格式
buku -e bookmarks.org
# 导出为 JSON
buku -j > bookmarks.json
# 导出特定书签
buku -e selected.html 1-10
3.8 常用操作速查表
| 操作 | 命令 | 说明 |
|---|---|---|
| 添加书签 | buku -a URL "标题" ,tag1,tag2 | 基本添加 |
| 列出所有 | buku -p | 显示全部书签 |
| 搜索书签 | buku -s keyword | 关键词搜索 |
| 标签搜索 | buku -s ,tag | 标签精确搜索 |
| 打开书签 | buku -o N | 在浏览器中打开 |
| 更新标题 | buku -u N --title "新标题" | 更新指定字段 |
| 添加标签 | buku -u N + ,newtag | 追加标签 |
| 删除标签 | buku -u N - ,oldtag | 移除标签 |
| 删除书签 | buku -d N | 删除指定书签 |
| 导出书签 | buku -e output.html | 导出为文件 |
| JSON 输出 | buku -j | JSON 格式输出 |
3.9 实用脚本示例
快速添加当前页面
#!/bin/bash
# save_current_page.sh - 保存当前浏览器页面到 Buku
# 使用方法:需要浏览器扩展或手动复制 URL
URL="$1"
TITLE="${2:-}"
TAGS="${3:-}"
if [ -z "$URL" ]; then
echo "用法: $0 <URL> [标题] [,标签]"
exit 1
fi
if [ -n "$TITLE" ] && [ -n "$TAGS" ]; then
buku -a "$URL" "$TITLE" "$TAGS"
elif [ -n "$TITLE" ]; then
buku -a "$URL" "$TITLE"
else
buku -a "$URL"
fi
echo "已保存: $URL"
批量检查死链
#!/bin/bash
# check_links.sh - 检查所有书签的 URL 有效性
echo "正在检查书签链接..."
buku -f 4 | while read -r url; do
status=$(curl -o /dev/null -s -w "%{http_code}" \
--connect-timeout 5 --max-time 10 "$url" 2>/dev/null)
if [ "$status" = "000" ]; then
echo "[无法连接] $url"
elif [ "$status" != "200" ]; then
echo "[${status}] $url"
fi
done
标签统计
#!/bin/bash
# tag_stats.sh - 统计标签使用情况
echo "=== 标签使用统计 ==="
echo ""
buku -p | grep "标签:" | sed 's/.*标签: //' | tr ',' '\n' | \
grep -v '^$' | sort | uniq -c | sort -rn | head -20
echo ""
echo "=== 总计 ==="
echo "书签总数: $(buku -p | grep -c '^\d')"
echo "标签种类: $(buku -p | grep '标签:' | sed 's/.*标签: //' | tr ',' '\n' | grep -v '^$' | sort -u | wc -l)"
3.10 本章小结
| 操作类型 | 命令格式 | 备注 |
|---|---|---|
| 添加 | buku -a URL [标题] [,标签] | 标签以逗号开头 |
| 查看 | buku -p [ID] | p 表示 print |
| 搜索 | buku -s 关键词 | 搜索标题和 URL |
| 标签搜索 | buku -s ,标签 | 逗号开头表示标签搜索 |
| 打开 | buku -o ID | 在浏览器中打开 |
| 更新 | buku -u ID [选项] | + 添加标签,- 删除标签 |
| 删除 | buku -d ID | 支持范围和多选 |
| 导出 | buku -e 文件名 | 支持 HTML/MD/Org 格式 |
扩展阅读
下一章:第 04 章:搜索详解 — 深入掌握 Buku 的搜索功能,包括正则表达式、模糊搜索和组合搜索。