布庫在行動!
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:{}
然後將受此類變更影響的記錄匯出到 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 阿倫·普拉卡什·賈納
缺少一個功能嗎?有一個滾動的待辦事項列表,其中包含已確定的任務。歡迎貢獻!請遵循公關指南。
另請參閱此處的文檔