buku em ação!
buku
é um poderoso gerenciador de favoritos e uma mini-web textual pessoal.
Para aqueles que preferem a GUI, bukuserver
expõe um front-end navegável em um servidor host local. Veja a página do bukuserver para configurações e capturas de tela.
Quando comecei a escrevê-lo, não consegui encontrar uma solução de linha de comando flexível com um banco de dados privado, portátil e que pudesse ser mesclado, além de integração perfeita com GUI. Portanto, buku
.
buku
pode importar marcadores de navegador(es) ou buscar o título, tags e descrição de um URL da web. Use seu editor favorito para adicionar, compor e atualizar marcadores. Pesquise favoritos instantaneamente com várias opções de pesquisa, incluindo regex e modo de verificação profunda (útil com URLs).
Ele pode procurar links quebrados na Wayback Machine. Há um ovo de Páscoa para revisitar marcadores aleatórios.
Não há rastreamento, histórico oculto, registros obsoletos, análise de uso ou localização.
Para começar imediatamente, vá para a seção Início rápido. buku
tem uma das melhores documentações do mercado. A página de manual vem com exemplos. Para detalhes internos, consulte as notas operacionais.
buku
também é uma biblioteca! Existem vários projetos relacionados, incluindo um plug-in de navegador.
Recurso | Dependência |
---|---|
Lang, SQLite | Python 3.8+ |
HTTPS | certificado, urllib3 |
Criptografia | criptografia |
HTML | beautifulsoup4, html5lib |
Para copiar URL para a área de transferência, buku
usa xsel
(ou xclip
) no Linux, pbcopy
(instalado por padrão) no OS X, clip
(instalado por padrão) no Windows, termux-clipboard
no Termux (emulação de terminal para Android), wl-copy
no Wayland. Se o X11 estiver faltando, os buffers de copiar e colar do GNU Screen ou tmux serão reconhecidos.
Para instalar o buku com todas as suas dependências do PyPI, execute:
# pip3 install buku
Você também pode instalar buku
a partir do seu gerenciador de pacotes. Se a versão disponível estiver desatualizada, tente um método de instalação alternativo.
● PyPI ( pip3 install buku
)
● Termux ( pip3 install buku
)
Pacotes gerados automaticamente (apenas com o componente cli) para Arch Linux, CentOS, Debian, Fedora, openSUSE Leap e Ubuntu estão disponíveis com a versão estável mais recente.
NOTA: CentOS pode não ter o pacote python3-beautifulsoup4 nos repositórios. Instale-o usando pip3.
Se você tiver o git instalado, clone este repositório. Caso contrário, baixe a versão estável mais recente ou a versão de desenvolvimento ( arriscado ).
Instale as dependências. Por exemplo, no Ubuntu:
$ apt-get install ca-certificates python3-urllib3 python3-cryptography python3-bs4
Instale o componente cli no local padrão ( /usr/local
):
$ sudo make install
Para remover, execute:
$ sudo make uninstall
PREFIX
é suportado, caso você queira instalar em um local diferente.
buku
é um utilitário independente. No diretório que contém, execute:
$ chmod +x buku
$ ./buku
Os scripts de preenchimento de shell para Bash, Fish e Zsh podem ser encontrados nos respectivos subdiretórios de preenchimento automático/. Consulte o manual do seu shell para obter instruções de instalação.
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
suporta cores personalizadas. Visite a página wiki sobre como personalizar cores para obter mais detalhes.
Exporte VISUAL
ou EDITOR
para apontar para seu editor favorito. Observe que VISUAL
tem precedência sobre EDITOR
.
Crie um atalho mais agradável e com alguma conveniência.
alias b='buku --suggest'
Importe automaticamente favoritos do(s) seu(s) navegador(es). Saia dos navegadores relevantes com antecedência para garantir que os bancos de dados não estejam bloqueados.
b --ai
Adicione manualmente um marcador (para prática).
b -w
Liste seus favoritos com índice de banco de dados.
b -p
Para integração com GUI e navegador (ou para sincronizar marcadores com seu serviço de gerenciamento de marcadores favorito), consulte a página wiki em Integração do sistema.
Comandos rápidos (bash/zsh) para pesquisa difusa com fzf e abrir a seleção no Firefox:
firefox $(buku -p -f 10 | fzf)
firefox $(buku -p -f 40 | fzf | cut -f1)
Script POSIX para mostrar também uma prévia do 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 e adicione um marcador do editor:
$ buku -w
$ buku -w 'gedit -w'
$ buku -w 'macvim -f' -a https://ddg.gg search engine, privacy
O primeiro comando escolhe o editor da variável de ambiente EDITOR
. O segundo comando abre o gedit no modo de bloqueio. O terceiro comando abre o macvim com a opção -f e a URL e tags preenchidas no modelo.
Adicione um marcador simples:
$ 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, +
: comentário, #
: tags
Título, descrição e tags serão obtidos do site. Buku armazena apenas URLs únicos e gerará erro se o URL já estiver presente no banco de dados:
Adicione um marcador com tags search engine
e privacy
, comente Search engine with perks
, busque o título da página na 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
onde, >
: URL, +
: comentário, #
: tags
Adicione um marcador com tags search engine
e privacy
e título personalizado imutável DDG
:
$ buku -a https://ddg.gg search engine, privacy --title 'DDG' --immutable 1
336. DDG (L)
> https://ddg.gg
# privacy,search engine
Observe que o URL deve preceder as tags.
Adicione um marcador sem título (também funciona para atualização):
$ buku -a https://ddg.gg search engine, privacy --title
Edite e atualize um marcador no editor:
$ buku -w 15012014
Isso abrirá os detalhes do marcador existente no editor para modificações. A variável de ambiente EDITOR
deve ser definida.
Atualize o marcador existente no índice 15012014 com novos URL, tags e comentários, busque o título na web:
$ buku -u 15012014 --url http://ddg.gg/ --tag web search, utilities -c Private search engine
Busque e atualize apenas o título do marcador em 15012014:
$ buku -u 15012014
Atualize apenas o comentário do marcador em 15012014:
$ buku -u 15012014 -c this is a new comment
Aplica-se a --url, --title e --tag também.
Exporte marcadores marcados com tag 1
ou tag 2
para HTML, XBEL, Markdown, Orgfile ou um novo banco de dados:
$ 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 favoritos .org --stag tag 1, tag 2 $ buku -e bookmarks.db --stag tag 1, tag 2 Todos os favoritos são exportados se a pesquisa não for selecionada.
Importe favoritos de HTML, XBEL, Markdown ou Orgfile:
$ buku -i bookmarks.html
$ buku -i bookmarks.xbel
$ buku -i bookmarks.md
$ buku -i bookmarks.org
$ buku -i bookmarks.db
Exclua apenas o comentário do marcador em 15012014:
$ buku -u 15012014 -c
Aplica-se a --title e --tag também. O URL não pode ser excluído sem excluir o marcador.
Atualize ou atualize o banco de dados completo com títulos de páginas da web:
$ buku -u
$ buku -u --tacit (show only failures and exceptions)
Esta operação pode atualizar os campos de título ou descrição de marcadores não imutáveis analisando a página buscada. Os campos serão atualizados somente se os campos buscados não estiverem vazios. As tags permanecem intactas.
Excluir marcador no índice 15012014:
$ buku -d 15012014
Index 15012020 moved to 15012014
O último índice é movido para o índice excluído para manter o banco de dados compacto. Adicione --tacit
para excluir sem confirmação.
Exclua todos os favoritos:
$ buku -d
Exclua um intervalo ou lista de favoritos:
$ buku -d 100-200
$ buku -d 100 15 200
Pesquise nos favoritos qualquer uma das palavras-chave kernel
e debugging
em URL, título ou tags:
$ buku kernel debugging
$ buku -s kernel debugging
Pesquise marcadores com TODAS as palavras-chave kernel
e debugging
em URL, título ou tags:
$ buku -S kernel debugging
Marcadores de pesquisa marcados com general kernel concepts
:
$ buku --stag general kernel concepts
Procure por marcadores que correspondam a QUALQUER uma das tags kernel
, debugging
, general kernel concepts
:
$ buku --stag kernel, debugging, general kernel concepts
Procure por marcadores que correspondam a TODAS as tags kernel
, debugging
, general kernel concepts
:
$ buku --stag kernel + debugging + general kernel concepts
Procure por marcadores que correspondam a qualquer uma das palavras-chave hello
ou world
, excluindo as palavras-chave real
e life
, que correspondam às tags kernel
e debugging
, mas excluindo as tags general kernel concepts
and books
:
$ buku hello world --exclude real life --stag 'kernel + debugging - general kernel concepts, books'
Pesquise marcadores com tokens diferentes para cada campo e imprima-os classificados por tags (crescente) e URL (decrescente)
$ buku --order +tags,-url --markers --sall 'global substring' '.title substring' ':url substring' :https '> description substring' '#partial,tags:' '#,exact,tags' '*another global substring'
Liste todas as tags exclusivas em ordem alfabética:
$ buku --stag
Faça uma pesquisa e atualize os resultados:
$ buku -s kernel debugging -u --tag + linux kernel
Faça uma pesquisa e exclua os resultados:
$ buku -s kernel debugging -d
Criptografe ou descriptografe o banco de dados com número personalizado de iterações (15) para gerar a chave:
$ buku -l 15
$ buku -k 15
O mesmo número de iterações deve ser especificado para uma instância de bloqueio e desbloqueio. O padrão é 8, se omitido.
Mostrar detalhes dos marcadores no índice 15012014 e nos intervalos 20-30, 40-50:
$ buku -p 20-30 15012014 40-50
Mostrar detalhes dos últimos 10 marcadores :
$ buku -p -10
Mostrar todos os favoritos com índice real do banco de dados:
$ buku -p
$ buku -p | more
Substitua a tag 'tag antiga' por 'tag nova':
$ buku --replace 'old tag' 'new tag'
Exclua a tag 'tag antiga' do banco de dados:
$ buku --replace 'old tag'
Anexe (ou exclua) as tags 'tag 1', 'tag 2' às (ou de) tags existentes do marcador no índice 15012014:
$ buku -u 15012014 --tag + tag 1, tag 2
$ buku -u 15012014 --tag - tag 1, tag 2
Abra o URL no índice 15012014 no navegador:
$ buku -o 15012014
Liste marcadores sem título ou tags para contabilidade:
$ buku -S blank
Listar marcadores com título imutável :
$ buku -S immutable
Encurte o URL www.google.com e o URL no índice 20:
$ buku --shorten www.google.com
$ buku --shorten 20
Anexar, remover tags quando solicitado (índice da lista de tags à esquerda, índice de favoritos à direita):
// 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
Listar marcadores com saída colorida :
$ buku --colors oKlxm -p
Adicione um marcador depois de seguir todos os redirecionamentos permanentes, mas somente se o servidor não responder com erro (e não houver falha na rede)
$ 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.
Adicione um marcador com a tag http redirect
se o servidor responder com um redirecionamento permanente ou uma tag com formato http 404
em uma resposta de erro:
$ 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
Atualize todos os marcadores que correspondam à pesquisa atualizando o URL se o servidor responder com um redirecionamento permanente, excluindo o marcador se o servidor responder com erro HTTP 400, 401, 402, 403, 404 ou 500 ou adicionando uma tag com formato como http:{}
no caso de qualquer outro erro HTTP; em seguida, exporte aqueles afetados por tais alterações para um arquivo HTML, marcando os registros excluídos, bem como URLs antigos para aqueles substituídos por redirecionamento.
$ buku -S ://wikipedia.net -u --url-redirect --tag-error --del-error 400-404,500 --export-on --export backup.html
Imprima um único marcador aleatório :
$ buku --random --print
Imprima 3 marcadores aleatórios ordenados por título (invertido) e URL:
$ buku --random 3 --order ,-title,+url --print
Imprima um único marcador aleatório que corresponda aos critérios de pesquisa e exporte para um arquivo Markdown (na ordem do banco de dados):
$ buku --random -S kernel debugging --export random.md
Troque as posições dos registros nº 4 e nº 5:
$ buku --swap 4 5
Mais ajuda :
$ buku -h
$ man buku
Fluxos de trabalho interativos podem ser automatizados usando expect. A edição nº 368 traz um exemplo prático sobre como automatizar a importação automática.
Você pode encontrar problemas com editores de GUI que mantêm apenas uma instância por padrão e retornam imediatamente de outras instâncias. Use a opção de editor apropriada para bloquear o chamador quando um novo documento for aberto. Consulte a edição nº 210 do gedit.
Direitos autorais © 2015-2024 Arun Prakash Jana
Faltando um recurso? Há uma lista de tarefas pendentes com tarefas identificadas. Contribuições são bem-vindas! Por favor, siga as diretrizes de relações públicas.
Veja também nossa documentação aqui