ブク活動中!
buku
強力なブックマーク マネージャーであり、個人的なテキストのミニ Web です。
GUI を好む人のために、 bukuserver
ローカル Web ホスト サーバー上で閲覧可能なフロントエンドを公開します。構成とスクリーンショットについては、bukuserver ページを参照してください。
私がこれを書き始めたとき、シームレスな GUI 統合を備えた、プライベートでポータブルなマージ可能なデータベースを備えた柔軟なコマンドライン ソリューションを見つけることができませんでした。したがって、 buku
。
buku
ブラウザからブックマークをインポートしたり、Web から URL のタイトル、タグ、説明を取得したりできます。お気に入りのエディタを使用して、ブックマークを追加、作成、更新します。正規表現やディープ スキャン モード (URL で便利) などの複数の検索オプションを使用して、ブックマークを瞬時に検索します。
Wayback Machine で壊れたリンクを検索できます。ランダムなブックマークを再訪問するためのイースターエッグがあります。
追跡、隠された履歴、古い記録、使用状況分析、またはホーミングはありません。
すぐに開始するには、「クイックスタート」セクションに移動してください。 buku
は最高のドキュメントの 1 つがあります。 man ページには例が付属しています。内部の詳細については、運用上の注意事項を参照してください。
buku
も図書館だよ!ブラウザ プラグインなど、いくつかの関連プロジェクトがあります。
特徴 | 依存 |
---|---|
ラング、SQLite | Python 3.8以降 |
HTTPS | 証明書、urllib3 |
暗号化 | 暗号化 |
HTML | 美しいスープ4、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
インストールすることもできます。利用可能なバージョンが古い場合は、別のインストール方法を試してください。
● 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 のシェル補完スクリプトは、auto-completion/ のそれぞれのサブディレクトリにあります。インストール手順については、シェルのマニュアルを参照してください。
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
ブックマークをDBインデックスで一覧表示します。
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
からエディターを選択します。 2 番目のコマンドは、gedit をブロック モードで開きます。 3 番目のコマンドは、オプション -f を使用して macvim を開き、URL とタグをテンプレートに入力します。
簡単なブックマークを追加します。
$ 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
コメントし、Web からページ タイトルを取得します。
$ 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
設定する必要があります。
インデックス 15012014 の既存のブックマークを新しい URL、タグ、コメントで更新し、Web からタイトルを取得します。
$ 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 Bookmarks .org --stag タグ 1、タグ 2 $ buku -e Bookmarks.db --stag タグ 1、タグ 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 を削除できません。
Web からのページ タイトルを使用して完全な DB を更新またはリフレッシュします。
$ buku -u
$ buku -u --tacit (show only failures and exceptions)
この操作では、取得したページを解析することで、不変でないブックマークのタイトルまたは説明フィールドを更新できます。フィールドは、フェッチされたフィールドが空でない場合にのみ更新されます。タグはそのまま残っております。
インデックス 15012014 のブックマークを削除します。
$ buku -d 15012014
Index 15012020 moved to 15012014
DB をコンパクトに保つために、最後のインデックスは削除されたインデックスに移動されます。確認せずに削除するには、 --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) で DB を暗号化または復号化し、キーを生成します。
$ buku -l 15
$ buku -k 15
1 つのロックおよびロック解除インスタンスに対して同じ反復回数を指定する必要があります。省略した場合のデフォルトは 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'
タグ「古いタグ」を DB から削除します。
$ buku --replace 'old tag'
インデックス 15012014 のブックマークの既存のタグにタグ「タグ 1」、「タグ 2」を追加 (または削除) します。
$ 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
URL www.google.com とインデックス 20 の URL を短縮します。
$ 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
タイトル (反転) と URL 順に並べた3 つのランダムなブックマークを印刷します。
$ buku --random 3 --order ,-title,+url --print
検索条件に一致する 1 つのランダムなブックマークを出力し、Markdown ファイルにエクスポートします(DB 順)。
$ buku --random -S kernel debugging --export random.md
レコード #4 と #5 の位置を交換します。
$ buku --swap 4 5
さらに詳しいヘルプ:
$ buku -h
$ man buku
インタラクティブなワークフローは、expect を使用して自動化できます。問題 #368 には、自動インポートの自動化に関する実際の例が記載されています。
デフォルトで 1 つのインスタンスのみを維持し、他のインスタンスからすぐに戻る GUI エディターでは問題が発生する可能性があります。適切なエディター オプションを使用して、新しいドキュメントを開いたときに呼び出し元をブロックします。 gedit については問題 #210 を参照してください。
著作権 © 2015-2024 アルン・プラカシュ・ジャナ
機能がありませんか?特定されたタスクを含むローリング ToDo リストがあります。貢献は大歓迎です! PRガイドラインに従ってください。
こちらのドキュメントもご覧ください