¡bukú en acción!
buku
es un potente administrador de marcadores y una mini web textual personal.
Para aquellos que prefieren la GUI, bukuserver
expone una interfaz navegable en un servidor web local. Consulte la página de bukuserver para ver configuraciones y capturas de pantalla.
Cuando comencé a escribirlo, no pude encontrar una solución de línea de comandos flexible con una base de datos privada, portátil y fusionable junto con una integración GUI perfecta. Por lo tanto, buku
.
buku
puede importar marcadores desde navegadores o recuperar el título, las etiquetas y la descripción de una URL de la web. Utilice su editor favorito para agregar, redactar y actualizar marcadores. Busque marcadores al instante con múltiples opciones de búsqueda, incluidas expresiones regulares y un modo de escaneo profundo (útil con URL).
Puede buscar enlaces rotos en Wayback Machine. Hay un huevo de Pascua para volver a visitar marcadores aleatorios.
No hay seguimiento, historial oculto, registros obsoletos, análisis de uso ni localización.
Para comenzar de inmediato, vaya a la sección Inicio rápido. buku
tiene una de las mejores documentación que existe. La página de manual viene con ejemplos. Para obtener detalles internos, consulte las notas operativas.
buku
también es una biblioteca! Hay varios proyectos relacionados, incluido un complemento para el navegador.
Característica | Dependencia |
---|---|
Idioma, SQLite | Pitón 3.8+ |
HTTPS | certificado, urllib3 |
Cifrado | criptografía |
HTML | hermosasopa4, html5lib |
Para copiar URL al portapapeles, buku
usa xsel
(o xclip
) en Linux, pbcopy
(instalado por defecto) en OS X, clip
(instalado por defecto) en Windows, termux-clipboard
en Termux (emulación de terminal para Android), wl-copy
en Wayland. Si falta X11, se reconocen los buffers de copiar y pegar de GNU Screen o tmux.
Para instalar buku con todas sus dependencias de PyPI, ejecute:
# pip3 install buku
También puedes instalar buku
desde tu administrador de paquetes. Si la versión disponible tiene fecha, pruebe con un método de instalación alternativo.
● PyPI ( pip3 install buku
)
● Termux ( pip3 install buku
)
Los paquetes generados automáticamente (solo con el componente cli) para Arch Linux, CentOS, Debian, Fedora, openSUSE Leap y Ubuntu están disponibles con la última versión estable.
NOTA: Es posible que CentOS no tenga el paquete python3-beautifulsoup4 en los repositorios. Instálelo usando pip3.
Si tienes git instalado, clona este repositorio. De lo contrario, descargue la última versión estable o de desarrollo ( arriesgada ).
Instalar las dependencias. Por ejemplo, en Ubuntu:
$ apt-get install ca-certificates python3-urllib3 python3-cryptography python3-bs4
Instale el componente cli en la ubicación predeterminada ( /usr/local
):
$ sudo make install
Para eliminar, ejecute:
$ sudo make uninstall
Se admite PREFIX
, en caso de que desee realizar la instalación en una ubicación diferente.
buku
es una utilidad independiente. Desde el directorio que lo contiene, ejecute:
$ chmod +x buku
$ ./buku
Los scripts de finalización de shell para Bash, Fish y Zsh se pueden encontrar en los respectivos subdirectorios de autocompletado/. Consulte el manual de su carcasa para obtener instrucciones de instalación.
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
admite colores personalizados. Visite la página wiki sobre cómo personalizar los colores para obtener más detalles.
Exporte VISUAL
o EDITOR
para apuntar a su editor favorito. Tenga en cuenta que VISUAL
tiene prioridad sobre EDITOR
.
Crea un atajo más dulce con cierta comodidad.
alias b='buku --suggest'
Importe automáticamente marcadores desde su(s) navegador(es). Salga de los navegadores correspondientes de antemano para asegurarse de que las bases de datos no estén bloqueadas.
b --ai
Agregue manualmente un marcador (para práctica).
b -w
Enumere sus marcadores con el índice DB.
b -p
Para la integración de la GUI y el navegador (o para sincronizar marcadores con su servicio de administración de marcadores favorito), consulte la página wiki sobre Integración del sistema.
Comandos rápidos (bash/zsh) para realizar búsquedas difusas con fzf y abrir la selección en Firefox:
firefox $(buku -p -f 10 | fzf)
firefox $(buku -p -f 40 | fzf | cut -f1)
Script POSIX para mostrar también una vista previa del marcador:
#! /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
Edite y agregue un marcador desde el editor:
$ buku -w
$ buku -w 'gedit -w'
$ buku -w 'macvim -f' -a https://ddg.gg search engine, privacy
El primer comando selecciona el editor de la variable de entorno EDITOR
. El segundo comando abre gedit en modo de bloqueo. El tercer comando abre macvim con la opción -f y la URL y las etiquetas completadas en la plantilla.
Agregue un marcador simple:
$ 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, +
: comentario, #
: etiquetas
El título, la descripción y las etiquetas se obtendrán del sitio. Buku solo almacena URL únicas y generará un error si la URL ya está presente en la base de datos:
Agregue un marcador con etiquetas search engine
y privacy
, comente Search engine with perks
, obtenga el título de la página de la 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
donde, >
: URL, +
: comentario, #
: etiquetas
Agregue un marcador con etiquetas search engine
y privacy
y título personalizado inmutable DDG
:
$ buku -a https://ddg.gg search engine, privacy --title 'DDG' --immutable 1
336. DDG (L)
> https://ddg.gg
# privacy,search engine
Tenga en cuenta que la URL debe preceder a las etiquetas.
Agregue un marcador sin título (también funciona para la actualización):
$ buku -a https://ddg.gg search engine, privacy --title
Edite y actualice un marcador desde el editor:
$ buku -w 15012014
Esto abrirá los detalles del marcador existente en el editor para realizar modificaciones. Se debe configurar la variable de entorno EDITOR
.
Actualice el marcador existente en el índice 15012014 con nueva URL, etiquetas y comentarios, obtenga el título de la web:
$ buku -u 15012014 --url http://ddg.gg/ --tag web search, utilities -c Private search engine
Obtenga y actualice solo el título del marcador en 15012014:
$ buku -u 15012014
Actualizar solo el comentario para marcar en 15012014:
$ buku -u 15012014 -c this is a new comment
Se aplica a --url, --title y --tag también.
Exporte marcadores etiquetados como tag 1
o tag 2
a HTML, XBEL, Markdown, Orgfile o una nueva base de datos:
$ buku -e bookmarks.html --stag etiqueta 1, etiqueta 2 $ buku -e bookmarks.xbel --stag etiqueta 1, etiqueta 2 $ buku -e bookmarks.md --stag etiqueta 1, etiqueta 2 $ buku -e marcadores .org --stag etiqueta 1, etiqueta 2 $ buku -e bookmarks.db --stag etiqueta 1, etiqueta 2 Todos los marcadores se exportan si no se opta por la búsqueda.
Importe marcadores desde HTML, XBEL, Markdown u Orgfile:
$ buku -i bookmarks.html
$ buku -i bookmarks.xbel
$ buku -i bookmarks.md
$ buku -i bookmarks.org
$ buku -i bookmarks.db
Eliminar solo el comentario para marcar en 15012014:
$ buku -u 15012014 -c
Se aplica a --title y --tag también. La URL no se puede eliminar sin eliminar el marcador.
Actualice o actualice la base de datos completa con títulos de páginas de la web:
$ buku -u
$ buku -u --tacit (show only failures and exceptions)
Esta operación puede actualizar los campos de título o descripción de marcadores no inmutables analizando la página recuperada. Los campos se actualizan solo si los campos recuperados no están vacíos. Las etiquetas permanecen intactas.
Eliminar marcador en el índice 15012014:
$ buku -d 15012014
Index 15012020 moved to 15012014
El último índice se mueve al índice eliminado para mantener la base de datos compacta. Agregue --tacit
para eliminar sin confirmación.
Eliminar todos los marcadores:
$ buku -d
Eliminar un rango o lista de marcadores:
$ buku -d 100-200
$ buku -d 100 15 200
Busque marcadores para CUALQUIER de las palabras clave kernel
y debugging
en URL, título o etiquetas:
$ buku kernel debugging
$ buku -s kernel debugging
Buscar marcadores con TODAS las palabras clave kernel
y debugging
en URL, título o etiquetas:
$ buku -S kernel debugging
Buscar marcadores etiquetados general kernel concepts
:
$ buku --stag general kernel concepts
Busque marcadores que coincidan con CUALQUIER de las etiquetas kernel
, debugging
y general kernel concepts
:
$ buku --stag kernel, debugging, general kernel concepts
Busque marcadores que coincidan con TODAS las etiquetas kernel
, debugging
y general kernel concepts
:
$ buku --stag kernel + debugging + general kernel concepts
Busque marcadores que coincidan con cualquiera de las palabras clave hello
o world
, excluyendo las palabras clave real
y life
, que coincidan con las etiquetas kernel
y debugging
, pero excluyendo las etiquetas general kernel concepts
y books
:
$ buku hello world --exclude real life --stag 'kernel + debugging - general kernel concepts, books'
Busque marcadores con diferentes tokens para cada campo e imprímalos ordenados por etiquetas (ascendente) y URL (descendente)
$ buku --order +tags,-url --markers --sall 'global substring' '.title substring' ':url substring' :https '> description substring' '#partial,tags:' '#,exact,tags' '*another global substring'
Enumere todas las etiquetas únicas alfabéticamente:
$ buku --stag
Ejecute una búsqueda y actualice los resultados:
$ buku -s kernel debugging -u --tag + linux kernel
Ejecute una búsqueda y elimine los resultados:
$ buku -s kernel debugging -d
Cifre o descifre la base de datos con un número personalizado de iteraciones (15) para generar la clave:
$ buku -l 15
$ buku -k 15
Se debe especificar el mismo número de iteraciones para una instancia de bloqueo y desbloqueo. El valor predeterminado es 8, si se omite.
Mostrar detalles de marcadores en el índice 15012014 y rangos 20-30, 40-50:
$ buku -p 20-30 15012014 40-50
Mostrar detalles de los últimos 10 marcadores :
$ buku -p -10
Mostrar todos los marcadores con índice real de la base de datos:
$ buku -p
$ buku -p | more
Reemplace la etiqueta 'etiqueta antigua' por 'etiqueta nueva':
$ buku --replace 'old tag' 'new tag'
Eliminar etiqueta 'etiqueta antigua' de la base de datos:
$ buku --replace 'old tag'
Agregue (o elimine) las etiquetas 'etiqueta 1', 'etiqueta 2' a (o desde) las etiquetas existentes del marcador en el índice 15012014:
$ buku -u 15012014 --tag + tag 1, tag 2
$ buku -u 15012014 --tag - tag 1, tag 2
Abra la URL en el índice 15012014 en el navegador:
$ buku -o 15012014
Lista de marcadores sin título ni etiquetas para contabilidad:
$ buku -S blank
Lista de marcadores con título inmutable :
$ buku -S immutable
Acorte la URL www.google.com y la URL en el índice 20:
$ buku --shorten www.google.com
$ buku --shorten 20
Agregar, eliminar etiquetas cuando se le solicite (índice de lista de etiquetas a la izquierda, índice de marcadores a la derecha):
// 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
Lista de marcadores con salida en color :
$ buku --colors oKlxm -p
Agregue un marcador después de seguir todas las redirecciones permanentes, pero solo si el servidor no responde con un error (y no hay una falla en la red)
$ 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.
Agregue un marcador con la etiqueta http redirect
si el servidor responde con una redirección permanente, o una etiqueta con forma de http 404
en una respuesta de error:
$ 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
Actualice todos los marcadores que coincidan con la búsqueda actualizando la URL si el servidor responde con una redirección permanente, eliminando el marcador si el servidor responde con el error HTTP 400, 401, 402, 403, 404 o 500, o agregando una etiqueta con forma de http:{}
en caso de cualquier otro error HTTP; luego exporte los afectados por dichos cambios a un archivo HTML, marcando los registros eliminados, así como las URL antiguas para las reemplazadas por la redirección.
$ buku -S ://wikipedia.net -u --url-redirect --tag-error --del-error 400-404,500 --export-on --export backup.html
Imprima un único marcador aleatorio :
$ buku --random --print
Imprime 3 marcadores aleatorios ordenados por título (invertido) y URL:
$ buku --random 3 --order ,-title,+url --print
Imprima un único marcador aleatorio que coincida con los criterios de búsqueda y expórtelo a un archivo Markdown (en orden de base de datos):
$ buku --random -S kernel debugging --export random.md
Intercambie posiciones de los registros 4 y 5:
$ buku --swap 4 5
Más ayuda :
$ buku -h
$ man buku
Los flujos de trabajo interactivos se pueden automatizar utilizando expect. El número 368 tiene un ejemplo práctico sobre la automatización de la importación automática.
Puede encontrar problemas con los editores de GUI que mantienen solo una instancia de forma predeterminada y regresan inmediatamente desde otras instancias. Utilice la opción de editor adecuada para bloquear a la persona que llama cuando se abre un nuevo documento. Consulte el número 210 para gedit.
Copyright © 2015-2024 Arun Prakash Jana
¿Falta una característica? Hay una lista de tareas pendientes con tareas identificadas. ¡Las contribuciones son bienvenidas! Siga las pautas de relaciones públicas.
Vea también nuestra documentación aquí