Организация локального поиска файлов через locate — дешево и сердито

2017-02-10

В командной строке есть утилита locate, которая ежедневно сканирует файловую систему с помощью утилиты updatedb и позволяет быстро находить файлы на диске по названию. Мне часто удобнее искать не по всему диску, а только по домашней директории или вообще по каким-то отдельным папкам. Обычно я использую find, но, читая man updatedb я обнаружил что поиск можно организовать в локальную базу таким вот образом:

updatedb -l 0 -o db_file -U source_directory

db_file — куда сохранять, source_directory — что сканировать.

Захотелось сделать свой локальный кэшируемый поисковик. Задача — сканировать домашнюю папку /home/vik, кэш хранить в /home/vik/.local/share/mlocate.db (еще одна полезная папка — ~/.local) и иметь возможность задать не locate а «local locate» — llocate.

Сделал отдельный скрипт на сканирование диска:

~/bin/locate/local_updatedb

С содержимым:

#!/bin/sh
updatedb -l 0 -o /home/vik/.local/share/locate.db -U /home/vik -n ".git .bzr .hg .svn .dropbox.cache"

Расшифровка ключей:

-l 0 не проверять права на доступ к базе данных

-o — где сохранить базу данных

-U — что сканировать

-n — какие имена игнорировать (очень удобно, чтобы не получать в поиске имен из папок контроля версий).

Дал скрипту права на запуск:

$ chmode a+x ~/bin/locate/local_updatedb

Обновлялку вынес в крон:

$ crontab -e

и вписал в файл:

@reboot /home/vik/bin/locate/local_updatedb 

«на каждой перезагрузке запускать сканирование диска»

Внимание: если вы редактируете crontab-файл — в конце нужно обязательно оставить пустую строку — иначе не заработает.

Последний штрих — добавил alias llocate в ~/.bash_aliases

alias llocate='locate -d /home/vik/.local/share/mlocate.db'

Пример:

vik@firefly:~$ llocate Войников

/home/vik/av/mp3/Виктор Войников - Честный стрелок.mp3
/home/vik/av/mp3/1_сборки/pulsar/Модель Для Сборки - Виктор Войников - Резонанс.mp3
/home/vik/book/hub/одессика/1914_Вся Одесса_Войников_737.png
...
/home/vik/zbox/yandex/Яндекс.Фотки/memorial Войников_new.jpeg.jpg

АБТФ, поиск и вызов книг, работа с книжным аппаратом

2016-10-06

И снова про plain text. Про то, что переходить по ссылкам из текстовых заметок я уже писал. Несколько позже выяснилось, что ваш покорный слуга изобрел велосипед — у vim’а есть свой netrw с хоткеем gx. Он тоже позволяет ходить по ссылкам из текста, плюс понимает запуск файлов по ссылке (то есть если в файле есть что-то типа ~/gifs/my-pic.jpg — можно стать на эту ссылку, набрать gx — и запустится графический просмотрщик, который по дефолту обрабатывает эту ссылку).

Я часто конспектирую книги — как по работе, так и просто что-то читая. Моя книжная папка часто перетасовывается — появляются новые книги, старые уходят в Глубокие Архивы, разделы пересматриваются. Прямая ссылка на книгу очень быстро стареет — а работая с книгой хочется, чтобы она открывалась прямо из файла. Тут нужен другой механизм. Читать далее…


«Маскарад в красном смещении»

2016-04-23

Леди coala-the-bear на днях упомянула f.lux и то, что подкрашивание монитора в красные цвета (и уборка синего спектра) хорошо влияет на сон. Для меня, как для совы-заполуношника это зело актуально. Но f.lux проприетарная и под linux работает не ахти, посему озаботился поиском подходящего свободного софта. Причем как на десктоп, так и на андроид, с которого я ночью читаю и на котором у меня стоит dimmer который хорош, но недостаточно.

Быстро выяснилось, что для андроида есть не менее свободный Red Moon, который более чем хорошо справляется со своими задачами. При этом нужно учитывать, что пока он работает не получится устанавливать apk-файлы — собственно, как я понимаю это верно для всех экранных фильтров. Поэтому сначала отключить, а потом обновлять софт.

Для десктопа есть redshift который работает аналогично. gtk-версия у меня не запустилась, поэтому я просто использую коммандлайновый вариант, запуская его из комстроки, через меню или на старте через ~/.config/openbox/autostart.sh и при необходимости убивая через killall redshift. Утилита хорошая, единственное что я бы советовал сделать — сразу положить в ~/.config/ файл redshift.conf (пример есть на сайте) с забитыми в него координатами и режимом manual.


old good stable

2016-03-07

Чем больше вожусь с «новейшими» библиотеками python, тем сильнее понимаю политику debian stable.


К годовщие Firefox или почему у мозиллы может получиться

2015-11-23

Если говорить о десктопе, то я почти всегда предпочитаю оффлайновое (десктопное) приложение онлайновому. То есть читать почту из thunderbird’а, а не из веб-интерфейса. Читаю книги с диска, а не из онлайновой библиотеки (только одно исключение — когда нужно оперативно найти цитату). Смотрю кино оффлайновым плейером, а не из тытруба. И так далее, и тому подобное.

Со смартфоном ситуация строго обратная. Какое-то время я ставил разные приложения типа прогноза погоды с wunderground’а, фейсбук мессенджера и т.д. и т.п. Потом открыл для себя такую чудесную штуку, как «страница -> добавить на домашний экран» в андроидном firefox. Эта штука добавляет на рабочий экран иконку, которая является закладкой на нужную страницу. То есть вместо огромного фейсбук мессенджера можно оставить иконку на страничку с сообщениями (а еще на страничку новостей, на страничку мероприятий) — и сэкономить этим пространство и время. Все равно без интернета мессенджер бесполезен, а с интернетом — с равным успехом можно сидеть и через браузер. Дальше последовали иконки-ярлыки на погодные сайты, на твиттер, на ЖЖ, на наиболее интересные для меня сайты и я проникся системой целиком.

Разница в функционале практически незаметна. При этом я имею **длинный список приложений** по цене одного firefox, который все равно стоит у меня по дефолту. Это не только экономия пространства — это позволяет:

— не качать каждый раз мегабайты апгрейдов и обновлений, когда выходит новая версия софта

— не думать про пароли и логины. firefox синхронизирует их с десктопной версией — и необходимость каждый раз при сбое вводить все заново здорово раздражает

— полный контроль за трафиком. проблема андроидного софта в том, что он считает себя умным и приоритетным — и каждый раз на включении интернета выкачивает свежую версию погоды, список пользователей он- и офф-лайн, список новостей и обновлений и несть этому конца и края. кое где (кое! где!) это лечится установкой правильных галочек и опций, но это заведомо лишние телодвижения (см пункт про логины и пароли), а чаще это не лечится вообще

— last but not least: полный контроль за поведением софта. если вам знакома ситуация, когда вы выходя в интернеты чтобы посмотреть прогноз погоды получаете сообщение из мессенджера (или почту от шефа, например) — и залипаете на час — вы меня понимаете. а у того же мессенджера есть мерзкая привычка включаться в онлайн каждый раз, когда этот онлайн появляется.

Словом ярлык на сайт, с моей скромной точки зрения, сильно лучше, чем андроидное приложение для оного сайта.

И оценивая это, я начинаю понимать, что FirefoxOS это не такая уж и плохая идея, как принято думать.


Комментирование в markdown и однострочниках bash файлов

2015-10-21

LUKE: Is Perl better than Python?
YODA: No… no… no. Quicker, easier, more seductive.
LUKE: But how will I know why Python is better than Perl?
YODA: You will know. When your code you try to read six months from now.

(c)

Хороший код (и хороший текст) всегда должен быть откомментирован. В последнее время я много пишу на markdown’не, который по ходу дела обрабатывается pandoc’ом и sed’ом, причем все это сведено в один makefile, который со временем разрастается до довольно больших размеров. Читать далее…


FBReader — чтение и допиливание

2015-07-05

Некоторое время назад перешел с CoolReader на FBReader — польстившись главным образом на сетевую систему синхронизации (которая до сих пор работает у них с каким-то скрипом). В принципе помимо системы синхронизации выяснилось, что FB за прошедшее время допилен до вменяемого состояния, в то время, как CoolReader практически не обновляется — поэтому, оставив обе программы, сейчас пользуюсь FB.

Неудобств у этой софтины пока всплыло два.

Первое — она категорически не хочет открывать .fb2.zip файлы, считая их прерогативой CoolReader. К счастью, есть человек, который не поленился сделать костыль к этому, что сильно облегчило работу с системой.

Второе — скачивая книги из флибусты по OPDS (или вообще из любой сетевой библиотеки), она складывает их в отдельные каталоги не называя по имени-названию, а просто нумеруя.

Скажем Кутузов Лидии Ивченко выкачивается не как Ivchenko_Zhizn-zamechatelnyh-lyudey_1372_Kutuzov.335158.fb2.zip, а как целое дерево вложенных папок: <родная папка fbreader'а>/flibusta.net/b/335158.zip, что ужасно неудобно.

Моя система хранения книг опирается в первую очередь на файловую систему — осмысленные названия файлов и иерархия папок по которым эти файлы тасуются. Ничего более удобного пока нет и, скорее всего, не будет придумано в ближайшее время. Иерархия “папка-файл” выглядит скучновато в отличие от всяческих all-inside хранилищ типа Calibre или той же встроенной библиотеки FBReader, зато надежна, минимальна по занимаемому месту, вообще не требует стороннего софта для упорядочивания, хорошо упорядочивается дельта-итерациями (тема отдельного разговора) и — как я начинаю понимать — нейрологически обоснованна (очень рекомендую такую книгу, как Daniel J. Levitin “The Organized Mind Thinking Straight in the Age of Information Overload” — написано хорошо, не заумно, без утомляющего выпендрежа и по делу).

Поэтому 335158.zip меня не устраивал категорически, хотя сам OPDS-доступ к сетевой библиотеке (т.е. скачивание книги через FBReader) оказался вполне удобным. Первым делом я попробовал переименовывать файлы вручную и раскладывать их по своим папкам — меня хватило файла на два.

К счастью, быстро выяснилось, что внутри у скачанного 335158.zip лежит вполне приличный по названию Ivchenko_Zhizn-zamechatelnyh-lyudey_1372_Kutuzov.335158.fb2 — дальше дело заключалось в написании простенького скрипта:

#!/bin/bash
# основная идея избавиться от закачки безымянных файлов с флибусты

# находит и раззиповывает в корень файлы в каталогах
find . -type f -name "*.fb2.zip" -exec unzip {} \;

Простенький однострочник на самом деле — find спускается вниз по дереву папок, находит файлы (-type f), которые заканчиваются на .fb2.zip (-name "*.fb2.zip") и запускает unzip, который над ними операцию распаковки (-exec unzip {} \; — вместо {} подставляется имя найденного файла). Разумеется, чтобы это работало, в системе должен быть установлен unzip (у меня он стоит по умолчанию — если его нет надо сделать что-нибудь типа sudo apt-get install unzip)

Этот файл (unzipper.sh) был положен в корень (то, что выше названо <родная папка fbreader'а>) и — дррррр! — тридцать файлов, которые к тому времени скопились в дереве папок, оказались найдены, раззипованы и аккуратно сложены в папке со скриптом.

На этом можно было бы остановиться — FBReader в принципе читает и раззипованный .fb2, но почему бы не упаковать все назад в зип? Для этого нужен примерно такой однострочник:

find . -type f -name '*.fb2' -exec zip '{}'.zip '{}' \;

Находим файлы, которые оканчиваются на .fb2 и зипуем их. -exec zip '{}'.zip '{}' \; выполнит операцию zip (он тоже должен быть в системе — sudo apt-get install zip) и подставит в нее найденные название файла ({}) и имя новосоздаваемого архива ({}.zip — старое имя + расширение .zip).

Итого:

#!/bin/bash
# основная идея избавиться от закачки безымянных файлов с флибусты

# находит и раззиповывает в корень файлы в каталогах
find . -type f -name "*.fb2.zip" -exec unzip {} \;

# зипует их обратно
find . -type f -name '*.fb2' -print -exec zip '{}'.zip '{}' \;

Можно было бы написать еще и автоматическое удаление ненужных файлов — но я предпочитаю делать это руками, на случай если что-то пойдет не так.


%d такие блоггеры, как: