布库在行动!
buku
是一个功能强大的书签管理器和个人文本迷你网络。
对于那些喜欢 GUI 的人, bukuserver
在本地 Web 主机服务器上公开了一个可浏览的前端。有关配置和屏幕截图,请参阅 bukuserver 页面。
当我开始编写它时,我找不到一个灵活的命令行解决方案,具有私有、可移植、可合并的数据库以及无缝 GUI 集成。因此, buku
。
buku
可以从浏览器导入书签或从网络获取 URL 的标题、标签和描述。使用您最喜欢的编辑器添加、撰写和更新书签。使用多个搜索选项即时搜索书签,包括正则表达式和深度扫描模式(方便使用 URL)。
它可以在 Wayback Machine 上查找损坏的链接。有一个复活节彩蛋可以重新访问随机书签。
没有跟踪、隐藏历史记录、过时记录、使用情况分析或定位。
要立即开始,请跳至快速入门部分。 buku
拥有最好的文档之一。手册页附带了示例。内部详情请参阅操作说明。
buku
也是一个图书馆!有几个相关项目,包括浏览器插件。
特征 | 依赖性 |
---|---|
郎,SQLite | Python 3.8+ |
HTTPS | 证书、urllib3 |
加密 | 密码学 |
超文本标记语言 | 美丽汤4,html5lib |
要将 URL 复制到剪贴板buku
在 Linux 上使用xsel
(或xclip
),在 OS X 上使用pbcopy
(默认安装),在 Windows 上使用clip
(默认安装),在 Termux 上使用termux-clipboard
(适用于 Android 的终端仿真),在 Wayland 上使用wl-copy
。如果 X11 丢失,GNU Screen 或 tmux 复制粘贴缓冲区将被识别。
要从 PyPI 安装 buku 及其所有依赖项,请运行:
# pip3 install buku
您还可以从包管理器安装buku
。如果可用版本已过时,请尝试其他安装方法。
● PyPI( pip3 install buku
)
● Termux( pip3 install buku
)
最新稳定版本提供了适用于 Arch Linux、CentOS、Debian、Fedora、openSUSE Leap 和 Ubuntu 的自动生成的软件包(仅包含 cli 组件)。
注意:CentOS 存储库中可能没有 python3-beautifulsoup4 包。使用 pip3 安装它。
如果您安装了 git,请克隆此存储库。否则下载最新的稳定版本或开发版本(有风险)。
安装依赖项。例如,在 Ubuntu 上:
$ apt-get install ca-certificates python3-urllib3 python3-cryptography python3-bs4
将 cli 组件安装到默认位置 ( /usr/local
):
$ sudo make install
要删除,请运行:
$ sudo make uninstall
支持PREFIX
,以防您想安装到其他位置。
buku
是一个独立的实用程序。从包含的目录中,运行:
$ chmod +x buku
$ ./buku
Bash、Fish 和 Zsh 的 Shell 补全脚本可以在 auto-completion/ 的相应子目录中找到。请参阅您的 shell 手册以获取安装说明。
usage: buku [OPTIONS] [KEYWORD [KEYWORD ...]]
Bookmark manager like a text-based mini-web.
POSITIONAL ARGUMENTS:
KEYWORD search keywords
GENERAL OPTIONS:
-a, --add URL [+|-] [tag, ...]
bookmark URL with comma-separated tags
(prepend tags with '+' or '-' to use fetched tags)
-u, --update [...] update fields of an existing bookmark
accepts indices and ranges
refresh title and desc if no edit options
if no arguments:
- update results when used with search
- otherwise refresh all titles and desc
-w, --write [editor|index]
edit and add a new bookmark in editor
else, edit bookmark at index in EDITOR
edit last bookmark, if index=-1
if no args, edit new bookmark in EDITOR
-d, --delete [...] remove bookmarks from DB
accepts indices or a single range
if no arguments:
- delete results when used with search
- otherwise delete all bookmarks
-h, --help show this information and exit
-v, --version show the program version and exit
EDIT OPTIONS:
--url keyword bookmark link
--tag [+|-] [...] comma-separated tags
clear bookmark tagset, if no arguments
'+' appends to, '-' removes from tagset
--title [...] bookmark title; if no arguments:
-a: do not set title, -u: clear title
-c, --comment [...] notes or description of the bookmark
clears description, if no arguments
--immutable N disable web-fetch during auto-refresh
N=0: mutable (default), N=1: immutable
--swap N M swap two records at specified indices
SEARCH OPTIONS:
-s, --sany [...] find records with ANY matching keyword
this is the default search option
-S, --sall [...] find records matching ALL the keywords
special keywords -
"blank": entries with empty title/tag
"immutable": entries with locked title
--deep match substrings ('pen' matches 'opens')
--markers search for keywords in specific fields
based on (optional) prefix markers:
'.' - title, '>' - description, ':' - URL,
'#' - tags (comma-separated, PARTIAL matches)
'#,' - tags (comma-separated, EXACT matches)
'*' - any field (same as no prefix)
-r, --sreg expr run a regex search
-t, --stag [tag [,|+] ...] [- tag, ...]
search bookmarks by tags
use ',' to find entries matching ANY tag
use '+' to find entries matching ALL tags
excludes entries with tags after ' - '
list all tags, if no search keywords
-x, --exclude [...] omit records matching specified keywords
--random [N] output random bookmarks out of the selection (default 1)
--order fields [...] comma-separated list of fields to order the output by
(prepend with '+'/'-' to choose sort direction)
ENCRYPTION OPTIONS:
-l, --lock [N] encrypt DB in N (default 8) # iterations
-k, --unlock [N] decrypt DB in N (default 8) # iterations
POWER TOYS:
--ai auto-import bookmarks from web browsers
Firefox, Chrome, Chromium, Vivaldi, Edge
-e, --export file export bookmarks to Firefox format HTML
export XBEL, if file ends with '.xbel'
export Markdown, if file ends with '.md'
format: [title](url) <!-- TAGS -->
export Orgfile, if file ends with '.org'
format: *[[url][title]] :tags:
export rss feed if file ends with '.rss'
export buku DB, if file ends with '.db'
combines with search results, if opted
-i, --import file import bookmarks from file
supports .html .xbel .json .md .org .rss .db
-p, --print [...] show record details by indices, ranges
print all bookmarks, if no arguments
-n shows the last n results (like tail)
-f, --format N limit fields in -p or JSON search output
N=1: URL; N=2: URL, tag; N=3: title;
N=4: URL, title, tag; N=5: title, tag;
N0 (10, 20, 30, 40, 50) omits DB index
-j, --json [file] JSON formatted output for -p and search.
prints to stdout if argument missing.
otherwise writes to given file
--colors COLORS set output colors in five-letter string
--nc disable color output
-n, --count N show N results per page (default 10)
--np do not show the subprompt, run and exit
-o, --open [...] browse bookmarks by indices and ranges
open a random bookmark, if no arguments
--oa browse all search results immediately
--replace old new replace old tag with new tag everywhere
delete old tag, if new tag not specified
--url-redirect when fetching an URL, use the resulting
URL from following *permanent* redirects
(when combined with --export, the old URL
is included as additional metadata)
--tag-redirect [tag] when fetching an URL that causes permanent
redirect, add a tag in specified pattern
(using 'http:{}' if not specified)
--tag-error [tag] when fetching an URL that causes an HTTP
error, add a tag in specified pattern
(using 'http:{}' if not specified)
--del-error [...] when fetching an URL causes any (given)
HTTP error, delete/do not add it
--export-on [...] export records affected by the above
options, including removed info
(requires --update and --export; specific
HTTP response filter can be provided)
--shorten index|URL fetch shortened url from tny.im service
--expand index|URL expand a tny.im shortened url
--cached index|URL browse a cached page from Wayback Machine
--offline add a bookmark without connecting to web
--suggest show similar tags when adding bookmarks
--tacit reduce verbosity, skip some confirmations
--nostdin do not wait for input (must be first arg)
--threads N max network connections in full refresh
default N=4, min N=1, max N=10
-V check latest upstream version available
-g, --debug show debug information and verbose logs
SYMBOLS:
> url
+ comment
# tags
PROMPT KEYS:
1-N browse search result indices and/or ranges
R [N] print out N random search results
(or random bookmarks if negative or N/A)
^ id1 id2 swap two records at specified indices
O [id|range [...]] open search results/indices in GUI browser
toggle try GUI browser if no arguments
a open all results in browser
s keyword [...] search for records with ANY keyword
S keyword [...] search for records with ALL keywords
d match substrings ('pen' matches 'opened')
m search with markers - search string is split
into keywords by prefix markers, which determine
what field the keywords is searched in:
'.', '>' or ':' - title, description or URL
'#'/'#,' - tags (comma-separated, partial/full match)
'*' - all fields (can be omitted in the 1st keyword)
note: tag marker is not affected by 'd' (deep search)
v fields change sorting order (default is '+index')
multiple comma/space separated fields can be specified
r expression run a regex search
t [tag, ...] search by tags; show taglist, if no args
g taglist id|range [...] [>>|>|<<] [record id|range ...]
append, set, remove (all or specific) tags
search by taglist id(s) if records are omitted
n show next page of search results
o id|range [...] browse bookmarks by indices and/or ranges
p id|range [...] print bookmarks by indices and/or ranges
w [editor|id] edit and add or update a bookmark
c id copy URL at search result index to clipboard
? show this help
q, ^D, double Enter exit buku
buku
支持自定义颜色。请访问有关如何自定义颜色的 wiki 页面以了解更多详细信息。
导出VISUAL
或EDITOR
以指向您最喜欢的编辑器。请注意, VISUAL
优先于EDITOR
。
创建一个更甜蜜、更方便的快捷方式。
alias b='buku --suggest'
从浏览器自动导入书签。请提前退出相关浏览器,以确保数据库未被锁定。
b --ai
手动添加书签(用于实践)。
b -w
使用数据库索引列出您的书签。
b -p
对于 GUI 和浏览器集成(或将书签与您最喜欢的书签管理服务同步),请参阅有关系统集成的 wiki 页面。
使用 fzf 进行模糊搜索并在 Firefox 中打开选择的快速 (bash/zsh) 命令:
firefox $(buku -p -f 10 | fzf)
firefox $(buku -p -f 40 | fzf | cut -f1)
POSIX 脚本也可以显示书签的预览:
#! /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 search engine, privacy
第一个命令从环境变量EDITOR
中选择编辑器。第二个命令以阻止模式打开 gedit。第三个命令使用选项 -f 以及模板中填充的 URL 和标签打开 macvim。
添加一个简单的书签:
$ buku --nostdin -a https://github.com/
2648. GitHub: Let’s build from here · GitHub
> https://github.com/
+ GitHub is where over 94 million developers shape the future of software, together. Contribute to the open source community, manage your Git repositories, review code like a pro, track bugs
and features, power your CI/CD and DevOps workflows, and secure code before you commit it.
$ buku --nostdin -a https://github.com/
[ERROR] URL [https://github.com/] already exists at index 2648
>
:URL, +
:评论, #
:标签
标题、描述和标签将从站点获取。 Buku 只存储唯一的 URL,如果该 URL 已存在于数据库中,则会引发错误:
添加带有标签search engine
和privacy
书签,评论Search engine with perks
,从网络获取页面标题:
$ buku -a https://ddg.gg search engine, privacy -c Search engine with perks
336. DuckDuckGo
> https://ddg.gg
+ Alternative search engine with perks
# privacy,search engine
其中, >
:URL, +
:注释, #
:标签
添加带有标签search engine
和privacy
以及不可变的自定义标题DDG
书签:
$ buku -a https://ddg.gg search engine, privacy --title 'DDG' --immutable 1
336. DDG (L)
> https://ddg.gg
# privacy,search engine
请注意,URL 必须位于标签之前。
添加没有标题的书签(也适用于更新):
$ buku -a https://ddg.gg search engine, privacy --title
从编辑器编辑和更新书签:
$ buku -w 15012014
这将在编辑器中打开现有书签的详细信息以进行修改。必须设置环境变量EDITOR
。
使用新的 URL、标签和评论更新索引 15012014 处的现有书签,从网络获取标题:
$ buku -u 15012014 --url http://ddg.gg/ --tag web search, utilities -c Private search engine
仅获取并更新 15012014 处书签的标题:
$ buku -u 15012014
仅更新书签 15012014 的评论:
$ buku -u 15012014 -c this is a new comment
也适用于 --url、--title 和 --tag。
将标记为tag 1
或tag 2
书签导出到 HTML、XBEL、Markdown、Orgfile 或新数据库:
$ buku -e bookmarks.html --stag 标签 1,标签 2 $ buku -e bookmarks.xbel --stag 标签 1,标签 2 $ buku -e bookmarks.md --stag 标签 1,标签 2 $ buku -e 书签.org --stag tag 1, tag 2 $ buku -e bookmarks.db --stag tag 1, tag 2 如果未选择搜索,则导出所有书签。
从 HTML、XBEL、Markdown 或 Orgfile导入书签:
$ buku -i bookmarks.html
$ buku -i bookmarks.xbel
$ buku -i bookmarks.md
$ buku -i bookmarks.org
$ buku -i bookmarks.db
仅删除 15012014 处书签的评论:
$ buku -u 15012014 -c
也适用于 --title 和 --tag。如果不删除书签,则无法删除 URL。
使用来自网络的页面标题更新或刷新完整数据库:
$ buku -u
$ buku -u --tacit (show only failures and exceptions)
此操作可以通过解析获取的页面来更新非不可变书签的标题或描述字段。仅当获取的字段非空时才会更新字段。标签保持不变。
删除索引 15012014 处的书签:
$ buku -d 15012014
Index 15012020 moved to 15012014
最后一个索引被移动到已删除的索引以保持数据库紧凑。添加--tacit
删除,无需确认。
删除所有书签:
$ buku -d
删除书签范围或列表:
$ buku -d 100-200
$ buku -d 100 15 200
在 URL、标题或标签中搜索任何关键字kernel
和debugging
的书签:
$ buku kernel debugging
$ buku -s kernel debugging
在 URL、标题或标签中搜索包含所有关键字kernel
和debugging
书签:
$ buku -S kernel debugging
搜索标记有general kernel concepts
的书签:
$ buku --stag general kernel concepts
搜索与任何标签kernel
、 debugging
、 general kernel concepts
匹配的书签:
$ buku --stag kernel, debugging, general kernel concepts
搜索与所有标签kernel
、 debugging
、 general kernel concepts
匹配的书签:
$ buku --stag kernel + debugging + general kernel concepts
搜索与任何关键字hello
或world
匹配的书签,不包括关键字real
和life
,同时匹配标签kernel
和debugging
,但不包括标签general kernel concepts
和books
:
$ buku hello world --exclude real life --stag 'kernel + debugging - general kernel concepts, books'
搜索每个字段具有不同标记的书签,并按标签(升序)和 URL(降序)排序打印出来
$ buku --order +tags,-url --markers --sall 'global substring' '.title substring' ':url substring' :https '> description substring' '#partial,tags:' '#,exact,tags' '*another global substring'
按字母顺序列出所有唯一标签:
$ buku --stag
运行搜索并更新结果:
$ buku -s kernel debugging -u --tag + linux kernel
运行搜索并删除结果:
$ buku -s kernel debugging -d
使用自定义迭代次数(15)加密或解密数据库以生成密钥:
$ buku -l 15
$ buku -k 15
必须为一个锁定和解锁实例指定相同的迭代次数。如果省略,则默认值为 8。
显示索引 15012014 和范围 20-30、40-50 处的书签的详细信息:
$ buku -p 20-30 15012014 40-50
显示最近 10 个书签的详细信息:
$ buku -p -10
显示数据库中具有真实索引的所有书签:
$ buku -p
$ buku -p | more
将标签“旧标签”替换为“新标签”:
$ buku --replace 'old tag' 'new tag'
从数据库中删除标签“旧标签”:
$ buku --replace 'old tag'
将标签“标签 1”、“标签 2”附加(或删除)到索引 15012014 处书签的现有标签(或从中删除):
$ buku -u 15012014 --tag + tag 1, tag 2
$ buku -u 15012014 --tag - tag 1, tag 2
在浏览器中打开索引 15012014 处的 URL :
$ buku -o 15012014
列出没有标题或标签的书签以进行记账:
$ buku -S blank
列出具有不可变标题的书签:
$ buku -S immutable
缩短网址www.google.com 和索引 20 处的网址:
$ buku --shorten www.google.com
$ buku --shorten 20
在提示时追加、删除标签(标签列表索引在左侧,书签索引在右侧):
// append tags at taglist indices 4 and 6-9 to existing tags in bookmarks at indices 5 and 2-3
buku (? for help) g 4 9-6 >> 5 3-2
// set tags at taglist indices 4 and 6-9 as tags in bookmarks at indices 5 and 2-3
buku (? for help) g 4 9-6 > 5 3-2
// remove all tags from bookmarks at indices 5 and 2-3
buku (? for help) g > 5 3-2
// remove tags at taglist indices 4 and 6-9 from tags in bookmarks at indices 5 and 2-3
buku (? for help) g 4 9-6 << 5 3-2
列出带有彩色输出的书签:
$ buku --colors oKlxm -p
在遵循所有永久重定向后添加书签,但前提是服务器没有响应错误(并且没有网络故障)
$ buku --add http://wikipedia.net --url-redirect --del-error
2. Wikipedia
> https://www.wikipedia.org/
+ Wikipedia is a free online encyclopedia, created and edited by volunteers around the world and hosted by the Wikimedia Foundation.
如果服务器响应永久重定向,则添加带有http redirect
标签的书签,或者在错误响应时添加形如http 404
标签:
$ buku --add http://wikipedia.net/notfound --tag-redirect 'http redirect' --tag-error 'http {}'
[ERROR] [404] Not Found
3. Not Found
> http://wikipedia.net/notfound
# http 404,http redirect
通过以下方式更新与搜索匹配的所有书签:如果服务器响应永久重定向,则更新 URL;如果服务器响应 HTTP 错误 400、401、402、403、404 或 500,则删除书签;或者添加形如http:{}
标记。 http:{}
如果出现任何其他 HTTP 错误;然后将受此类更改影响的记录导出到 HTML 文件中,标记已删除的记录以及重定向替换的旧 URL。
$ buku -S ://wikipedia.net -u --url-redirect --tag-error --del-error 400-404,500 --export-on --export backup.html
打印一个随机书签:
$ buku --random --print
打印出 3 个随机书签,按标题(反向)和 url排序:
$ buku --random 3 --order ,-title,+url --print
打印出匹配搜索条件的单个随机书签,并导出到 Markdown 文件(按 DB 顺序):
$ buku --random -S kernel debugging --export random.md
交换记录 #4 和 #5 的位置:
$ buku --swap 4 5
更多帮助:
$ buku -h
$ man buku
交互式工作流程可以使用expect实现自动化。 Issue #368 有一个关于自动导入的工作示例。
您可能会遇到 GUI 编辑器的问题,该编辑器默认情况下仅维护一个实例并立即从其他实例返回。打开新文档时,使用适当的编辑器选项来阻止调用者。有关 gedit,请参阅问题 #210。
版权所有 © 2015-2024 阿伦·普拉卡什·贾纳
缺少一个功能吗?有一个滚动的待办事项列表,其中包含已确定的任务。欢迎贡献!请遵循公关指南。
另请参阅此处的文档