强曰为道
与天地相似,故不违。知周乎万物,而道济天下,故不过。旁行而不流,乐天知命,故不忧.
文档目录

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 -jJSON 格式输出

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 的搜索功能,包括正则表达式、模糊搜索和组合搜索。