Некоторое время назад перешел с 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 '{}' \;
Можно было бы написать еще и автоматическое удаление ненужных файлов — но я предпочитаю делать это руками, на случай если что-то пойдет не так.
Комментирование в markdown и однострочниках bash файлов
2015-10-21LUKE: 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, который со временем разрастается до довольно больших размеров. Читать далее…
Leave a Comment » | bash скрипты | Метки: bash, comment, комментарии, однострочники, markdown, скриптинг, scripting, sed | Постоянная ссылка
Автор tengu911