Buku in Aktion!
buku
ist ein leistungsstarker Lesezeichen-Manager und ein persönliches Text-Mini-Web.
Für diejenigen, die die GUI bevorzugen, stellt bukuserver
ein durchsuchbares Frontend auf einem lokalen Webhost-Server zur Verfügung. Konfiguration und Screenshots finden Sie auf der Bukuserver-Seite.
Als ich anfing, es zu schreiben, konnte ich keine flexible Befehlszeilenlösung mit einer privaten, portablen, fusionierbaren Datenbank und nahtloser GUI-Integration finden. Daher buku
.
buku
kann Lesezeichen aus Browsern importieren oder den Titel, Tags und die Beschreibung einer URL aus dem Web abrufen. Verwenden Sie Ihren bevorzugten Editor, um Lesezeichen hinzuzufügen, zu erstellen und zu aktualisieren. Durchsuchen Sie Lesezeichen sofort mit mehreren Suchoptionen, einschließlich Regex und einem Deep-Scan-Modus (praktisch bei URLs).
Es kann defekte Links auf der Wayback Machine nachschlagen. Es gibt ein Easter Egg zum erneuten Aufrufen zufälliger Lesezeichen.
Es gibt keine Nachverfolgung, keinen versteckten Verlauf, keine veralteten Datensätze, keine Nutzungsanalyse oder keine Ortung.
Um sofort loszulegen, springen Sie zum Abschnitt „Schnellstart“. buku
hat eine der besten Dokumentationen überhaupt. Die Manpage enthält Beispiele. Interne Details entnehmen Sie bitte den Betriebshinweisen.
buku
ist auch eine Bibliothek! Es gibt mehrere verwandte Projekte, darunter ein Browser-Plug-in.
Besonderheit | Abhängigkeit |
---|---|
Lang, SQLite | Python 3.8+ |
HTTPS | certifi, urllib3 |
Verschlüsselung | Kryptographie |
HTML | beautifulsoup4, html5lib |
Um URLs clip
die Zwischenablage zu kopieren termux-clipboard
verwendet buku
xsel
( wl-copy
xclip
) unter Linux, pbcopy
(standardmäßig installiert) unter OS Wenn X11 fehlt, werden GNU Screen- oder tmux-Copy-Paste-Puffer erkannt.
Um buku mit all seinen Abhängigkeiten von PyPI zu installieren, führen Sie Folgendes aus:
# pip3 install buku
Sie können buku
auch über Ihren Paketmanager installieren. Wenn die verfügbare Version veraltet ist, versuchen Sie es mit einer alternativen Installationsmethode.
● PyPI ( pip3 install buku
)
● Termux ( pip3 install buku
)
Automatisch generierte Pakete (nur mit der CLI-Komponente) für Arch Linux, CentOS, Debian, Fedora, openSUSE Leap und Ubuntu sind mit der neuesten stabilen Version verfügbar.
HINWEIS: CentOS verfügt möglicherweise nicht über das Paket python3-beautifulsoup4 in den Repos. Installieren Sie es mit pip3.
Wenn Sie Git installiert haben, klonen Sie dieses Repository. Andernfalls laden Sie die neueste stabile Version oder Entwicklungsversion herunter ( riskant ).
Installieren Sie die Abhängigkeiten. Zum Beispiel unter Ubuntu:
$ apt-get install ca-certificates python3-urllib3 python3-cryptography python3-bs4
Installieren Sie die CLI-Komponente am Standardspeicherort ( /usr/local
):
$ sudo make install
Führen Sie zum Entfernen Folgendes aus:
$ sudo make uninstall
PREFIX
wird unterstützt, falls Sie an einem anderen Ort installieren möchten.
buku
ist ein eigenständiges Dienstprogramm. Führen Sie im enthaltenden Verzeichnis Folgendes aus:
$ chmod +x buku
$ ./buku
Shell-Vervollständigungsskripte für Bash, Fish und Zsh finden Sie in den jeweiligen Unterverzeichnissen von auto-completion/. Installationsanweisungen finden Sie im Handbuch Ihrer 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
unterstützt benutzerdefinierte Farben. Weitere Informationen finden Sie auf der Wiki-Seite zum Anpassen von Farben.
Exportieren Sie VISUAL
oder EDITOR
um auf Ihren bevorzugten Editor zu verweisen. Beachten Sie, dass VISUAL
Vorrang vor EDITOR
hat.
Erstellen Sie eine süßere Abkürzung mit etwas Komfort.
alias b='buku --suggest'
Lesezeichen automatisch aus Ihrem/Ihren Browser(n) importieren. Bitte beenden Sie vorher die entsprechenden Browser, um sicherzustellen, dass die Datenbanken nicht gesperrt werden.
b --ai
Fügen Sie manuell ein Lesezeichen hinzu (für praktische Zwecke).
b -w
Listen Sie Ihre Lesezeichen mit dem DB-Index auf.
b -p
Informationen zur GUI- und Browser-Integration (oder zum Synchronisieren von Lesezeichen mit Ihrem bevorzugten Lesezeichen-Verwaltungsdienst) finden Sie auf der Wiki-Seite zur Systemintegration.
Schnellbefehle (bash/zsh) zur Fuzzy-Suche mit fzf und zum Öffnen der Auswahl in Firefox:
firefox $(buku -p -f 10 | fzf)
firefox $(buku -p -f 40 | fzf | cut -f1)
POSIX-Skript, um auch eine Vorschau des Lesezeichens anzuzeigen:
#! /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
Bearbeiten Sie ein Lesezeichen und fügen Sie es im Editor hinzu:
$ buku -w
$ buku -w 'gedit -w'
$ buku -w 'macvim -f' -a https://ddg.gg search engine, privacy
Der erste Befehl wählt den Editor aus der Umgebungsvariablen EDITOR
aus. Der zweite Befehl öffnet gedit im Blockierungsmodus. Der dritte Befehl öffnet macvim mit der Option -f und der in der Vorlage ausgefüllten URL und Tags.
Fügen Sie ein einfaches Lesezeichen hinzu:
$ 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, +
: Kommentar, #
: Tags
Titel, Beschreibung und Tags werden von der Website abgerufen. Buku speichert nur eindeutige URLs und gibt einen Fehler aus, wenn die URL bereits in der Datenbank vorhanden ist:
Fügen Sie ein Lesezeichen mit den Tags search engine
und privacy
hinzu, kommentieren Sie Search engine with perks
und rufen Sie den Seitentitel aus dem Internet ab:
$ 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
wobei >
: URL, +
: Kommentar, #
: Tags
Fügen Sie ein Lesezeichen mit den Tags search engine
und privacy
sowie dem unveränderlichen benutzerdefinierten Titel DDG
hinzu :
$ buku -a https://ddg.gg search engine, privacy --title 'DDG' --immutable 1
336. DDG (L)
> https://ddg.gg
# privacy,search engine
Beachten Sie, dass die URL vor den Tags stehen muss.
Fügen Sie ein Lesezeichen ohne Titel hinzu (funktioniert auch für Updates):
$ buku -a https://ddg.gg search engine, privacy --title
Bearbeiten und aktualisieren Sie ein Lesezeichen im Editor:
$ buku -w 15012014
Dadurch werden die Details des vorhandenen Lesezeichens im Editor für Änderungen geöffnet. Die Umgebungsvariable EDITOR
muss gesetzt sein.
Vorhandenes Lesezeichen bei Index 15012014 mit neuer URL, Tags und Kommentaren aktualisieren , Titel aus dem Web abrufen:
$ buku -u 15012014 --url http://ddg.gg/ --tag web search, utilities -c Private search engine
Nur Titel für Lesezeichen unter 15012014 abrufen und aktualisieren :
$ buku -u 15012014
Nur Kommentar für Lesezeichen bei 15012014 aktualisieren :
$ buku -u 15012014 -c this is a new comment
Gilt auch für --url, --title und --tag.
Exportieren Sie Lesezeichen mit tag 1
oder tag 2
nach HTML, XBEL, Markdown, Orgfile oder einer neuen Datenbank:
$ 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 Lesezeichen .org --stag Tag 1, Tag 2 $ buku -e bookmarks.db --stag Tag 1, Tag 2 Alle Lesezeichen werden exportiert, wenn die Suche nicht aktiviert ist.
Lesezeichen aus HTML, XBEL, Markdown oder Orgfile importieren :
$ buku -i bookmarks.html
$ buku -i bookmarks.xbel
$ buku -i bookmarks.md
$ buku -i bookmarks.org
$ buku -i bookmarks.db
Nur Kommentar für Lesezeichen bei 15012014 löschen :
$ buku -u 15012014 -c
Gilt auch für --title und --tag. Die URL kann nicht gelöscht werden, ohne das Lesezeichen zu löschen.
Aktualisieren oder aktualisieren Sie die vollständige Datenbank mit Seitentiteln aus dem Web:
$ buku -u
$ buku -u --tacit (show only failures and exceptions)
Dieser Vorgang kann die Titel- oder Beschreibungsfelder nicht unveränderlicher Lesezeichen aktualisieren, indem die abgerufene Seite analysiert wird. Felder werden nur aktualisiert, wenn die abgerufenen Felder nicht leer sind. Tags bleiben unberührt.
Lesezeichen bei Index 15012014 löschen :
$ buku -d 15012014
Index 15012020 moved to 15012014
Der letzte Index wird in den gelöschten Index verschoben, um die Datenbank kompakt zu halten. Fügen Sie --tacit
hinzu, um ohne Bestätigung zu löschen.
Alle Lesezeichen löschen :
$ buku -d
Löschen Sie einen Bereich oder eine Liste von Lesezeichen:
$ buku -d 100-200
$ buku -d 100 15 200
Durchsuchen Sie Lesezeichen nach JEDEM der Schlüsselwörter kernel
und debugging
in URL, Titel oder Tags:
$ buku kernel debugging
$ buku -s kernel debugging
Durchsuchen Sie Lesezeichen mit ALLEN Schlüsselwörtern kernel
und debugging
in URL, Titel oder Tags:
$ buku -S kernel debugging
Such -Lesezeichen mit dem Tag general kernel concepts
:
$ buku --stag general kernel concepts
Suchen Sie nach Lesezeichen, die IRGENDEINEM der Tags kernel
, debugging
, general kernel concepts
entsprechen:
$ buku --stag kernel, debugging, general kernel concepts
Suchen Sie nach Lesezeichen, die ALLEN Tags kernel
, debugging
und general kernel concepts
entsprechen:
$ buku --stag kernel + debugging + general kernel concepts
Suchen Sie nach Lesezeichen, die mit einem der Schlüsselwörter hello
oder world
übereinstimmen, mit Ausnahme der Schlüsselwörter real
und „ life
, die sowohl mit den Tags kernel
als auch debugging
übereinstimmen, aber mit Ausnahme der Tags general kernel concepts
und books
:
$ buku hello world --exclude real life --stag 'kernel + debugging - general kernel concepts, books'
Suchen Sie nach Lesezeichen mit unterschiedlichen Token für jedes Feld und drucken Sie diese sortiert nach Tags (aufsteigend) und URL (absteigend) aus.
$ buku --order +tags,-url --markers --sall 'global substring' '.title substring' ':url substring' :https '> description substring' '#partial,tags:' '#,exact,tags' '*another global substring'
Listen Sie alle eindeutigen Tags alphabetisch auf:
$ buku --stag
Führen Sie eine Suche durch und aktualisieren Sie die Ergebnisse:
$ buku -s kernel debugging -u --tag + linux kernel
Führen Sie eine Suche durch und löschen Sie die Ergebnisse:
$ buku -s kernel debugging -d
Verschlüsseln oder entschlüsseln Sie die Datenbank mit einer benutzerdefinierten Anzahl von Iterationen (15), um den Schlüssel zu generieren:
$ buku -l 15
$ buku -k 15
Für eine Sperr- und Entsperrinstanz muss die gleiche Anzahl an Iterationen angegeben werden. Der Standardwert ist 8, wenn er weggelassen wird.
Details zu Lesezeichen bei Index 15012014 und den Bereichen 20–30, 40–50 anzeigen :
$ buku -p 20-30 15012014 40-50
Details zu den letzten 10 Lesezeichen anzeigen:
$ buku -p -10
Alle Lesezeichen mit echtem Index aus der Datenbank anzeigen :
$ buku -p
$ buku -p | more
Ersetzen Sie das Tag „altes Tag“ durch „neues Tag“:
$ buku --replace 'old tag' 'new tag'
Tag „Alter Tag“ aus DB löschen :
$ buku --replace 'old tag'
Hängen Sie die Tags „Tag 1“, „Tag 2“ an (oder von) vorhandenen Tags des Lesezeichens am Index 15012014 an (oder löschen Sie sie) :
$ buku -u 15012014 --tag + tag 1, tag 2
$ buku -u 15012014 --tag - tag 1, tag 2
URL bei Index 15012014 im Browser öffnen :
$ buku -o 15012014
Listen Sie Lesezeichen ohne Titel oder Tags für die Buchhaltung auf:
$ buku -S blank
Lesezeichen mit unveränderlichem Titel auflisten:
$ buku -S immutable
Kürzen Sie die URL www.google.com und die URL bei Index 20:
$ buku --shorten www.google.com
$ buku --shorten 20
Anhängen und Entfernen von Tags nach Eingabeaufforderung (Taglisten-Index links, Lesezeichen-Index rechts):
// 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
Lesezeichen mit farbiger Ausgabe auflisten:
$ buku --colors oKlxm -p
Fügen Sie ein Lesezeichen hinzu, nachdem Sie allen permanenten Weiterleitungen gefolgt sind, aber nur, wenn der Server nicht mit einem Fehler antwortet (und kein Netzwerkfehler vorliegt).
$ 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.
Fügen Sie ein Lesezeichen mit dem Tag http redirect
hinzu, wenn der Server mit einer permanenten Umleitung antwortet, oder einem Tag in der Form http 404
bei einer Fehlerantwort:
$ 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
Aktualisieren Sie alle Lesezeichen, die mit der Suche übereinstimmen, indem Sie die URL aktualisieren, wenn der Server mit einer dauerhaften Weiterleitung antwortet, das Lesezeichen löschen, wenn der Server mit dem HTTP-Fehler 400, 401, 402, 403, 404 oder 500 antwortet, oder ein Tag in der Form http:{}
hinzufügen. http:{}
im Falle eines anderen HTTP-Fehlers; Exportieren Sie dann diejenigen, die von solchen Änderungen betroffen sind, in eine HTML-Datei und markieren Sie gelöschte Datensätze sowie alte URLs für diejenigen, die durch die Umleitung ersetzt wurden.
$ buku -S ://wikipedia.net -u --url-redirect --tag-error --del-error 400-404,500 --export-on --export backup.html
Drucken Sie ein einzelnes zufälliges Lesezeichen aus:
$ buku --random --print
Drucken Sie 3 zufällige Lesezeichen aus , sortiert nach Titel (umgekehrt) und URL:
$ buku --random 3 --order ,-title,+url --print
Drucken Sie ein einzelnes zufälliges Lesezeichen aus, das den Suchkriterien entspricht, und exportieren Sie es in eine Markdown-Datei (in DB-Reihenfolge):
$ buku --random -S kernel debugging --export random.md
Vertauschen Sie die Positionen der Datensätze Nr. 4 und Nr. 5:
$ buku --swap 4 5
Weitere Hilfe :
$ buku -h
$ man buku
Interaktive Workflows können mithilfe von Expect automatisiert werden. Ausgabe Nr. 368 enthält ein funktionierendes Beispiel zur Automatisierung des automatischen Imports.
Bei GUI-Editoren, die standardmäßig nur eine Instanz verwalten und von anderen Instanzen sofort zurückkehren, können Probleme auftreten. Verwenden Sie die entsprechende Editoroption, um den Aufrufer zu blockieren, wenn ein neues Dokument geöffnet wird. Siehe Ausgabe Nr. 210 für gedit.
Copyright © 2015-2024 Arun Prakash Jana
Fehlt Ihnen eine Funktion? Es gibt eine fortlaufende ToDo-Liste mit identifizierten Aufgaben. Beiträge sind willkommen! Bitte beachten Sie die PR-Richtlinien.
Sehen Sie sich auch unsere Dokumentation hier an