buku
buku运行中!
简介
buku
是一个功能强大的书签管理器和个人文本迷你网络。
对于喜欢图形界面的用户,bukuserver在本地网络服务器上提供了一个可浏览的前端界面。
当我开始编写它时,我找不到一个灵活的命令行解决方案,它具有私密、便携、可合并的数据库,同时还能与图形界面无缝集成。因此,buku
应运而生。
buku
可以从浏览器导入书签,或从网络获取URL的标题、标签和描述。使用你喜欢的编辑器来添加、编辑和更新书签。通过多种搜索选项(包括正则表达式和深度扫描模式)即时搜索书签,这对于处理URL特别方便。
它可以在Wayback Machine上查找损坏的链接。还有一个彩蛋功能可以随机revisit书签。
它不会进行任何跟踪、隐藏历史记录、过时记录、使用分析或定位。
要立即开始使用,请跳转到快速入门部分。buku
拥有最好的文档之一。man页面附带示例。关于内部细节,请参考操作说明。
buku
也是一个库!有几个相关项目,包括一个浏览器插件。
目录
特性
- 存储书签,自动获取标题、标签和描述
- 自动从Firefox、Google Chrome、Chromium和MS Edge导入
- 在浏览器中打开书签和搜索结果
- 缩短、展开URL
- 从Wayback Machine浏览缓存页面
- 文本编辑器集成
- 轻量级、简洁界面,自定义颜色
- 强大的搜索选项(正则表达式、子字符串...)
- 持续搜索,即时切换模式
- 可移植、可合并的数据库,便于系统间同步
- 从/向HTML、XBEL、Markdown、RSS或Orgfile导入/导出书签
- 使用重定向(>>、>、<<)进行智能标签管理
- 多线程全数据库刷新
- 手动加密支持
- Shell补全脚本,带示例的man页面
- 注重隐私(无未经确认的用户数据收集)
安装
依赖
功能 | 依赖 |
---|---|
语言, SQLite | Python 3.8+ |
HTTPS | certifi, urllib3 |
加密 | cryptography |
HTML | beautifulsoup4, html5lib |
要将URL复制到剪贴板,buku
在Linux上使用xsel
(或xclip
),在OS X上使用pbcopy
(默认安装),在Windows上使用clip
(默认安装),在Termux(Android的终端模拟器)上使用termux-clipboard
,在Wayland上使用wl-copy
。如果缺少X11,则识别GNU Screen或tmux的复制粘贴缓冲区。
从包管理器安装
要从PyPI安装buku及其所有依赖项,运行:
# pip3 install buku
你也可以从包管理器安装buku
。如果可用版本过时,请尝试其他安装方法。
发布包
Arch Linux、CentOS、Debian、Fedora、openSUSE Leap和Ubuntu系统可获取自动生成的软件包(仅包含命令行界面组件),这些软件包与最新稳定版本相对应。
注意:CentOS的软件仓库中可能没有python3-beautifulsoup4包。请使用pip3安装。
从源代码安装
如果您已安装git,请克隆此仓库。否则,请下载最新稳定版本或开发版本(风险较高)。
安装依赖项。例如,在Ubuntu上:
$ apt-get install ca-certificates python3-urllib3 python3-cryptography python3-bs4
将命令行界面组件安装到默认位置(/usr/local
):
$ sudo make install
要卸载,请运行:
$ sudo make uninstall
如果您想安装到其他位置,可以使用PREFIX
参数。
独立运行
buku
是一个独立的工具。在包含目录中运行:
$ chmod +x buku
$ ./buku
Shell自动补全
Bash、Fish和Zsh的Shell自动补全脚本可以在auto-completion/的相应子目录中找到。请参阅您所使用的Shell的手册以获取安装说明。
使用方法
命令行选项
用法:buku [选项] [关键词 [关键词 ...]]
类似文本迷你网站的书签管理器。
位置参数:
关键词 搜索关键词
常规选项:
-a, --add 网址 [标签, ...]
为网址添加书签,标签用逗号分隔
-u, --update [...] 更新现有书签的字段
接受索引和范围
如果没有编辑选项,则刷新标题和描述
如果没有参数:
- 与搜索一起使用时更新结果
- 否则刷新所有标题和描述
-w, --write [编辑器|索引]
在编辑器中编辑并添加新书签
或在EDITOR中编辑指定索引的书签
如果索引为-1,则编辑最后一个书签
如果没有参数,在EDITOR中编辑新书签
-d, --delete [...] 从数据库中删除书签
接受索引或单个范围
如果没有参数:
- 与搜索一起使用时删除结果
- 否则删除所有书签
-h, --help 显示此信息并退出
-v, --version 显示程序版本并退出
编辑选项:
--url 关键词 书签链接
--tag [+|-] [...] 用逗号分隔的标签
如果没有参数,则清除书签的标签集
'+'追加到标签集,'-'从标签集中移除
--title [...] 书签标题;如果没有参数:
-a:不设置标题,-u:清除标题
-c, --comment [...] 书签的注释或描述
如果没有参数,则清除描述
--immutable N 在自动刷新期间禁用网页获取
N=0:可变(默认),N=1:不可变
搜索选项:
-s, --sany [...] 查找与任何关键词匹配的记录
这是默认的搜索选项
-S, --sall [...] 查找与所有关键词匹配的记录
特殊关键词 -
"blank":标题/标签为空的条目
"immutable":标题已锁定的条目
--deep 匹配子字符串('pen'匹配'opens')
-r, --sreg 表达式 运行正则表达式搜索
-t, --stag [标签 [,|+] ...] [- 标签, ...]
按标签搜索书签
使用','查找与任何标签匹配的条目
使用'+'查找与所有标签匹配的条目
排除' - '后标签的条目
如果没有搜索关键词,则列出所有标签
-x, --exclude [...] 忽略与指定关键词匹配的记录
加密选项:
-l, --lock [N] 使用N次迭代(默认8次)加密数据库
-k, --unlock [N] 使用N次迭代(默认8次)解密数据库
高级功能: --ai 自动从网络浏览器导入书签 Firefox、Chrome、Chromium、Vivaldi、Edge -e, --export 文件 将书签导出为Firefox格式的HTML 如果文件以'.xbel'结尾则导出XBEL格式 如果文件以'.md'结尾则导出Markdown格式 格式:[标题](https://github.com/jarun/buku/blob/master/url 如果文件以'.org'结尾则导出Orgfile格式 格式:*[[url][标题]] :标签: 如果文件以'.rss'结尾则导出RSS订阅 如果文件以'.db'结尾则导出buku数据库 如果选择搜索结果,则与搜索结果合并 -i, --import 文件 从文件导入书签 支持.html .xbel .json .md .org .rss .db格式 -p, --print [...] 按索引、范围显示记录详情 如果没有参数则打印所有书签 -n显示最后n条结果(类似tail) -f, --format N 限制-p或JSON搜索输出的字段 N=1:URL;N=2:URL、标签;N=3:标题; N=4:URL、标题、标签;N=5:标题、标签; N0(10、20、30、40、50)省略数据库索引 -j, --json [文件] -p和搜索的JSON格式输出。 如果缺少参数则打印到标准输出。 否则写入指定文件 --colors 颜色 设置五字母字符串的输出颜色 --nc 禁用彩色输出 -n, --count N 每页显示N条结果(默认10) --np 不显示子提示符,运行后退出 -o, --open [...] 按索引和范围浏览书签 如果没有参数则打开随机书签 --oa 立即浏览所有搜索结果 --replace 旧 新 将所有旧标签替换为新标签 如果未指定新标签则删除旧标签 --url-redirect 获取URL时,使用永久重定向后的URL (与--export结合时,旧URL作为额外元数据包含) --tag-redirect [标签] 获取导致永久重定向的URL时, 按指定模式添加标签 (如果未指定则使用'http:{}') --tag-error [标签] 获取导致HTTP错误的URL时, 按指定模式添加标签 (如果未指定则使用'http:{}') --del-error [...] 获取URL导致任何(给定的) HTTP错误时,删除/不添加它 --export-on [...] 导出受上述选项影响的记录, 包括删除的信息 (需要--update和--export;可以 提供特定的HTTP响应过滤器) --shorten 索引|URL 从tny.im服务获取缩短的url --expand 索引|URL 展开tny.im缩短的url --cached 索引|URL 从Wayback Machine浏览缓存页面 --offline 不连接网络添加书签 --suggest 添加书签时显示相似标签 --tacit 减少详细程度,跳过一些确认 --nostdin 不等待输入(必须是第一个参数) --threads N 完全刷新时的最大网络连接数 默认N=4,最小N=1,最大N=10 -V 检查可用的最新上游版本 -g, --debug 显示调试信息和详细日志
符号: > url + 评论 # 标签
提示键: 1-N 浏览搜索结果索引和/或范围 O [id|范围 [...]] 在GUI浏览器中打开搜索结果/索引 如果没有参数则切换尝试GUI浏览器 a 在浏览器中打开所有结果 s 关键词 [...] 搜索包含任一关键词的记录 S 关键词 [...] 搜索包含所有关键词的记录 d 匹配子字符串('pen'匹配'opened') r 表达式 运行正则表达式搜索 t [标签, ...] 按标签搜索;如果没有参数则显示标签列表 g 标签列表 id|范围 [...] [>>|>|<<] [记录id|范围 ...] 追加、设置、删除(全部或特定)标签 如果省略记录则按标签列表id搜索 n 显示搜索结果的下一页 o id|范围 [...] 按索引和/或范围浏览书签 p id|范围 [...] 按索引和/或范围打印书签 w [编辑器|id] 编辑并添加或更新书签 c id 将搜索结果索引处的URL复制到剪贴板 ? 显示此帮助 q, ^D, 连续两次回车 退出buku
#### 颜色
`buku`支持自定义颜色。有关如何[自定义颜色](https://github.com/jarun/buku/wiki/Customize-colors)的更多详细信息,请访问wiki页面。
### 快速入门
1. 将`VISUAL`或`EDITOR`导出指向你喜欢的编辑器。请注意,`VISUAL`优先于`EDITOR`。
2. 创建一个更方便的快捷方式。
alias b='buku --suggest'
3. 自动从浏览器导入书签。请事先退出相关浏览器以确保数据库未被锁定。
b --ai
4. 手动添加书签(实践操作)。
b -w
5. 列出带数据库索引的书签。
b -p
6. 关于GUI和浏览器集成(或与你喜欢的书签管理服务同步书签),请参阅wiki页面上的[系统集成](https://github.com/jarun/buku/wiki/System-integration)。
7. 使用fzf进行模糊搜索并在Firefox中打开选择的快速(bash/zsh)命令:
firefox $(buku -p -f 10 | fzf)
firefox $(buku -p -f 40 | fzf | cut -f1)
显示书签预览的POSIX脚本:
```sh
#!/usr/bin/env sh
url=$(buku -p -f4 | fzf -m --reverse --preview "buku -p {1}" --preview-window=wrap | cut -f2)
if [ -n "$url" ]; then
echo "$url" | xargs firefox
fi
示例
-
编辑并添加一个书签:
$ buku -w $ buku -w 'gedit -w' $ buku -w 'macvim -f' -a https://ddg.gg 搜索引擎, 隐私
第一个命令从环境变量
EDITOR
中选择编辑器。第二个命令以阻塞模式打开gedit。第三个命令以-f选项打开macvim,并在模板中填充URL和标签。 -
添加一个简单的书签: $ buku --nostdin -a https://github.com/
-
GitHub:让我们从这里开始构建 · GitHub
- GitHub是超过9400万开发者共同塑造软件未来的地方。为开源社区做贡献,管理您的Git仓库,像专业人士一样审核代码,跟踪错误和功能,驱动您的CI/CD和DevOps工作流程,并在提交代码之前确保其安全性。
$ buku --nostdin -a https://github.com/ [错误] URL [https://github.com/] 已存在于索引2648
>
: URL, +
: 评论, #
: 标签
标题、描述和标签将从网站获取。Buku只存储唯一的URL,如果URL已存在于数据库中,将会报错:
3. 添加一个带有标签search engine
和privacy
,评论为Search engine with perks
的书签,并从网络获取页面标题:
$ buku -a https://ddg.gg search engine, privacy -c Search engine with perks 336. DuckDuckGo
- Alternative search engine with perks
privacy,search engine
其中,>
: URL, +
: 评论, #
: 标签
4. 添加一个带有标签search engine
和privacy
以及不可变自定义标题DDG
的书签:
$ buku -a https://ddg.gg search engine, privacy --title 'DDG' --immutable 1 336. DDG (L)
privacy,search engine
注意URL必须在标签之前。 5. 添加一个无标题的书签(更新时也适用):
$ buku -a https://ddg.gg search engine, privacy --title 6. 从编辑器编辑并更新书签:
$ buku -w 15012014
这将在编辑器中打开现有书签的详细信息以进行修改。必须设置环境变量EDITOR
。
7. 使用新的URL、标签和评论更新索引15012014处的现有书签,从网络获取标题:
$ buku -u 15012014 --url http://ddg.gg/ --tag web search, utilities -c Private search engine 8. 仅为索引15012014处的书签获取并更新标题:
$ buku -u 15012014 9. 仅更新评论为索引15012014处的书签:
$ buku -u 15012014 -c this is a new comment
也适用于--url、--title和--tag。
10. 将带有标签tag 1
或tag 2
的书签导出为HTML、XBEL、Markdown、Orgfile或新数据库:
$ buku -e bookmarks.html --stag tag 1, tag 2 $ buku -e bookmarks.xbel --stag tag 1, tag 2 $ buku -e bookmarks.md --stag tag 1, tag 2 $ buku -e bookmarks.org --stag tag 1, tag 2 $ buku -e bookmarks.db --stag tag 1, tag 2 如果不选择搜索,则导出所有书签。 11. 从HTML、XBEL、Markdown或Orgfile导入书签:
$ buku -i bookmarks.html $ buku -i bookmarks.xbel $ buku -i bookmarks.md $ buku -i bookmarks.org $ buku -i bookmarks.db 12. 仅删除索引15012014处书签的评论:
$ buku -u 15012014 -c 也适用于--title和--tag。不删除书签就无法删除URL。 13. 更新或刷新整个数据库的网页标题:
$ buku -u $ buku -u --tacit(仅显示失败和异常) 此操作可以通过解析获取的页面来更新非不可变书签的标题或描述字段。只有当获取的字段非空时才会更新字段。标签保持不变。 14. 删除索引15012014处的书签:
$ buku -d 15012014
索引15012020移至15012014
最后的索引被移至删除的索引以保持数据库紧凑。添加--tacit
可以无需确认直接删除。
15. 删除所有书签:
$ buku -d 16. 删除一个范围或列表的书签:
$ buku -d 100-200
$ buku -d 100 15 200
17. 在URL、标题或标签中搜索任意关键词kernel
和debugging
的书签:
$ buku kernel debugging
$ buku -s kernel debugging
18. 在URL、标题或标签中搜索所有关键词kernel
和debugging
的书签:
$ buku -S kernel debugging
19. 搜索标记为general kernel concepts
的书签:
$ buku --stag general kernel concepts
20. 搜索匹配任意标签kernel
、debugging
、general kernel concepts
的书签:
$ buku --stag kernel, debugging, general kernel concepts
21. 搜索匹配所有标签kernel
、debugging
、general kernel concepts
的书签:
$ buku --stag kernel + debugging + general kernel concepts
22. 搜索匹配关键词hello
或world
,排除关键词real
和life
,匹配标签kernel
和debugging
,但排除标签general kernel concepts
和books
的书签:
$ buku hello world --exclude real life --stag 'kernel + debugging - general kernel concepts, books' 23. 按字母顺序列出所有唯一标签:
$ buku --stag 24. 执行搜索并更新结果:
$ buku -s kernel debugging -u --tag + linux kernel 25. 执行搜索并删除结果:
$ buku -s kernel debugging -d 26. 使用自定义迭代次数(15)生成密钥来加密或解密数据库:
$ buku -l 15 $ buku -k 15 一次锁定和解锁实例必须指定相同的迭代次数。如果省略,默认为8。 27. 显示索引15012014和范围20-30、40-50的书签详细信息:
$ buku -p 20-30 15012014 40-50 28. 显示最后10个书签的详细信息:
$ buku -p -10 29. 从数据库显示所有书签的实际索引:
$ buku -p $ buku -p | more 30. 替换标签'old tag'为'new tag':
$ buku --replace 'old tag' 'new tag' 31. 从数据库删除标签'old tag': $ buku --replace '旧标签'
-
添加(或删除)标签 '标签1'、'标签2'到(或从)索引为15012014的书签的现有标签中:
$ buku -u 15012014 --tag + 标签1, 标签2 $ buku -u 15012014 --tag - 标签1, 标签2
-
在浏览器中打开URL索引为15012014的书签:
$ buku -o 15012014
-
列出没有标题或标签的书签以便整理:
$ buku -S blank
-
列出不可变标题的书签:
$ buku -S immutable
-
缩短URL www.google.com 和索引为20的URL:
$ buku --shorten www.google.com $ buku --shorten 20
-
在提示符下添加、删除标签(左侧为标签列表索引,右侧为书签索引):
// 将标签列表索引4和6-9的标签添加到书签索引5和2-3的现有标签中 buku (? 获取帮助) g 4 9-6 >> 5 3-2 // 将标签列表索引4和6-9的标签设置为书签索引5和2-3的标签 buku (? 获取帮助) g 4 9-6 > 5 3-2 // 删除书签索引5和2-3的所有标签 buku (? 获取帮助) g > 5 3-2 // 从书签索引5和2-3的标签中删除标签列表索引4和6-9的标签 buku (? 获取帮助) g 4 9-6 << 5 3-2
-
列出带有彩色输出的书签:
$ buku --colors oKlxm -p
-
在跟随所有永久重定向后添加书签,但仅当服务器没有响应错误(且没有网络故障)时:
$ buku --add http://wikipedia.net --url-redirect --del-error 2. 维基百科
- 维基百科是一个免费的在线百科全书,由世界各地的志愿者创建和编辑,由维基媒体基金会托管。
-
如果服务器响应永久重定向,则添加带有标签
http redirect
的书签,或在错误响应时添加形如http 404
的标签:$ buku --add http://wikipedia.net/notfound --tag-redirect 'http redirect' --tag-error 'http {}' [错误] [404] 未找到 3. 未找到
http 404,http redirect
-
更新所有匹配搜索的书签,如果服务器响应永久重定向则更新URL,如果服务器响应HTTP错误400、401、402、403、404或500则删除书签,或在出现任何其他HTTP错误时添加形如
http:{}
的标签;然后将受此类更改影响的书签导出到HTML文件中,标记已删除的记录以及被重定向替换的旧URL。$ buku -S ://wikipedia.net -u --url-redirect --tag-error --del-error 400-404,500 --export-on --export backup.html
-
更多帮助:
$ buku -h $ man buku
自动化
可以使用expect自动化交互工作流。问题#368有一个关于自动导入自动化的工作示例。
故障排除
编辑器集成
使用默认只维护一个实例并从其他实例立即返回的GUI编辑器时,可能会遇到问题。使用适当的编辑器选项以在打开新文档时阻塞调用者。有关gedit的问题,请参见问题#210。
协作者
版权所有 © 2015-2024 Arun Prakash Jana
贡献
缺少某个功能?这里有一个持续更新的待办事项列表,列出了已确定的任务。欢迎贡献!请遵循PR指南。
相关项目
- bukubrow, 用于浏览器集成的WebExtension
- oil, 边搜索边输入的命令行前端
- buku_run, rofi前端
- pinku, 一个Pinboard到buku的导入工具
- buku-dmenu, 一个简单的bash dmenu包装器
- poku, 在Pocket和buku之间同步
- Ebuku, buku的Emacs接口
- diigoku, Diigo的buku导入器
- BukuBot, 带有扩展可视界面的XMPP聊天机器人