буку в действии!
buku
— мощный менеджер закладок и личный текстовый мини-веб.
Для тех, кто предпочитает графический интерфейс, bukuserver
предоставляет доступный для просмотра интерфейс на локальном сервере веб-хостинга. См. страницу bukuserver для конфигурации и снимков экрана.
Когда я начал его писать, я не мог найти гибкое решение для командной строки с частной, переносимой, объединяемой базой данных и бесшовной интеграцией с графическим интерфейсом. Следовательно, buku
.
buku
может импортировать закладки из браузеров или получать заголовок, теги и описание URL-адреса из Интернета. Используйте свой любимый редактор для добавления, создания и обновления закладок. Мгновенный поиск по закладкам с помощью нескольких параметров поиска, включая регулярное выражение и режим глубокого сканирования (удобно с URL-адресами).
Он может искать неработающие ссылки на Wayback Machine. Есть пасхалка для повторного посещения случайных закладок.
Никакого отслеживания, скрытой истории, устаревших записей, аналитики использования или самонаведения.
Чтобы сразу начать работу, перейдите в раздел «Быстрый старт». У buku
одна из лучших документации. На странице руководства приведены примеры. Внутренние подробности см. в эксплуатационных примечаниях.
buku
— это тоже библиотека! Существует несколько связанных проектов, включая плагин для браузера.
Особенность | Зависимость |
---|---|
Ланг, SQLite | Питон 3.8+ |
HTTPS | сертификат, urllib3 |
Шифрование | криптография |
HTML | красивый суп4, html5lib |
Чтобы скопировать URL-адрес в буфер обмена, buku
использует xsel
(или xclip
) в Linux, pbcopy
(установлен по умолчанию) в OS X, clip
(установлен по умолчанию) в Windows, termux-clipboard
в Termux (эмуляция терминала для Android), wl-copy
в Wayland. Если X11 отсутствует, распознаются буферы копирования-вставки GNU Screen или tmux.
Чтобы установить Buku со всеми его зависимостями из PyPI, запустите:
# pip3 install buku
Вы также можете установить buku
из менеджера пакетов. Если доступная версия устарела, попробуйте альтернативный метод установки.
● PyPI ( pip3 install buku
)
● Termux ( pip3 install buku
)
Автоматически сгенерированные пакеты (только с компонентом cli) для Arch Linux, CentOS, Debian, Fedora, openSUSE Leap и Ubuntu доступны в последней стабильной версии.
ПРИМЕЧАНИЕ. 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 можно найти в соответствующих подкаталогах автозаполнения/. Инструкции по установке см. в руководстве к вашей оболочке.
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
поддерживает пользовательские цвета. Посетите вики-страницу о том, как настроить цвета, чтобы получить более подробную информацию.
Экспортируйте VISUAL
или EDITOR
чтобы указать свой любимый редактор. Обратите внимание, что VISUAL
имеет приоритет над EDITOR
.
Создайте более удобный ярлык.
alias b='buku --suggest'
Автоматический импорт закладок из вашего браузера(ов). Пожалуйста, заранее закройте соответствующие браузеры, чтобы убедиться, что базы данных не заблокированы.
b --ai
Добавьте закладку вручную (для практического использования).
b -w
Перечислите свои закладки с помощью индекса БД.
b -p
Для интеграции графического пользовательского интерфейса и браузера (или для синхронизации закладок с вашей любимой службой управления закладками) обратитесь к вики-странице «Системная интеграция».
Быстрые (bash/zsh) команды для нечеткого поиска с помощью fzf и открытия выделения в Firefox:
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 в режиме блокировки. Третья команда открывает macvim с опцией -f и 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
, получите заголовок страницы из Интернета:
$ 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, теги и комментарии, получите заголовок из Интернета:
$ 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 tag 1, tag 2 $ buku -e bookmarks.xbel --stag tag 1, tag 2 $ buku -e bookmarks.md --stag tag 1, tag 2 $ buku -e bookmarks .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
Поиск закладок по ЛЮБЫМ ключевым словам kernel
и debugging
по URL-адресу, заголовку или тегам:
$ buku kernel debugging
$ buku -s kernel debugging
Поиск закладок по ВСЕМ ключевым словам kernel
и debugging
по URL, заголовку или тегам:
$ 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
Откройте URL-адрес по индексу 15012014 в браузере:
$ buku -o 15012014
Список закладок без заголовков и тегов для бухгалтерского учета:
$ buku -S blank
Список закладок с неизменяемым заголовком :
$ buku -S immutable
Сократите URL-адрес www.google.com и URL-адрес с индексом 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:{}
в случае любой другой ошибки 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 (в порядке БД):
$ buku --random -S kernel debugging --export random.md
Поменяйте местами записи №4 и №5:
$ buku --swap 4 5
Дополнительная помощь :
$ buku -h
$ man buku
Интерактивные рабочие процессы можно автоматизировать с помощью ожидаемого. В выпуске № 368 есть рабочий пример автоматизации автоматического импорта.
Вы можете столкнуться с проблемами с редакторами графического интерфейса, которые по умолчанию поддерживают только один экземпляр и немедленно возвращаются из других экземпляров. Используйте соответствующий параметр редактора, чтобы заблокировать вызывающего абонента при открытии нового документа. См. проблему № 210 для gedit.
Copyright © 2015-2024 Арун Пракаш Джана
Не хватает функции? Имеется подвижный список дел с определенными задачами. Вклады приветствуются! Пожалуйста, соблюдайте правила PR.
См. также нашу документацию здесь