ms_shark 25.02.2011 02:48
Скрипты — Обработка FB2-книг
В рамках конкурса "Лучший скрипт" хочу предложить вам несколько скриптов по обработке FB2-книг. Скрипты не претендуют на оригинальность, но помогут вам немного освоиться с регулярными выражениями.Предыстория: Муж осуществил наконец-то свою давнюю мечту - купил себе е-ридер. И заставил меня разгребать свою накопленую за пару лет библиотеку. Руками это можно было сделать, но слишком уж муторно. Поэтому я, по мере возникновения проблем, написала несколько скриптиков.
Под катом - подробности.
Скрипт №1 (использовать ОЧЕНЬ осторожно):
Теоритически, этот скрипт должен конвертировать книги с "неправильной" кодировкой в UTF-8, но на практике он "уничтожил" половину книг. Хорошо, что была резервная копия всей библиотеки. Хотя "неправильные" книги он все же привел в удобочитаемый вид.
Скрипт №2:
Этот скрипт разархивирует книги в zip-архиве. Т.к. часто содержимое zip-архивов содержит в себе "кракозябры", то этот скрипт просто берёт архив и преименовывает содержащуюся в нём книгу в имя архива (очень хорошо помогает при скачивании с Либрусека).
Скрипт №3:
Книги, скачанные с Либрусека, обычно именуются в транслите. Переименовать одну книгу труда не составляет, но вот если их много - это уже проблема. Скрипт "транслитерирует" имена файлов. Конечно "транслит" немного туповатый, он не учитывает "мягкий знак", букву "ш" и "заглавные", но этому его легко обучить, правда тогда вы потеряете некоторые другие буквы :-)
Скрипт №4:
Книги, скачанные с Либрусека, в своем имени имеют какие-то цифры в конце. Этот скрипт эти цифры удаляет.
Скрипт №5:
"Нормализационый" скрипт поможет привести в порядок имена файлов - удалит лишние пробелы в начале имени, двойные пробелы, пробелы "точкой расширения".
А теперь я попытаюсь показать, как все это я использовала на практике.
По понятным причинам первый скрипт я пропущу ;-)
Скрипт №2:
Скрипт №3:
1 |
#fb2_translit.sh /srv/nfs/export/library/tmp
|
Скрипт №4:
1 |
#fb2_delete_num.sh /srv/nfs/export/library/tmp
|
Конечно эти скрипты не решают всех проблем, но здорово помогают в обработке библиотеки.
Если есть желание - их можно объединить в один большой скрипт, но тогда нельзя будет поручиться за результат обработки.
В любом случае - эти скрипты помогли в изучении регулярных выражений.
solomenikm 25.02.2011 03:24 #
+ 2 -
Здорово! Чтобы было Очень здорово нужно чтобы файлы переименовывались согласно данным забитым в файл, а не обратной транслитерацией, но, как я понимаю, парсер xml это уже домашнее задание.
в первом скрипте вместо iconv можно использовать enca, тогда проблема с "уничтожением" части книг отпадет.
милая, твоя последовательность из sed'ов ужасна, достаточно просто разделить сами команды sed'ов точкой с запятой и можно отказаться от конвейеров и лишних sed'ов.
а можно пример? я подозревала, что можно оптимизировать, но не знала как именно.
например, как оптимизировать эту строку:
например, как оптимизировать эту строку:
translit_file="$(echo "$base_file" | sed 's/\.<0-9>\{6\}//g' | sed 's/\.<0-9>\{5\}//g' | sed 's/\.<0-9>\{4\}//g')"
sed 's/\.<0-9>\{6\}//g; s/\.<0-9>\{5\}//g; s/\.<0-9>\{4\}//g'
Как-то так.
Как-то так.
а разве сед не поддерживает диапазоны вроде .\{4,6\} (любой символ от 4 до 6 раз) ? (лень проверять в мане, сейчас под вендой)
вообще я считаю писать sed 'bla-bla-bla' | sed 'bla-bla-bla' | sed 'bla-bla-bla' - моветон. для этого нужно использовать одну конструкцию, или группировку {} в сложных случаях
рекомендую к прочтению
рекомендую к прочтению
\{i\} As *, but matches exactly i sequences (i is a decimal integer; for portability, keep it between 0 and 255 inclusive).
\{i,j\} Matches between i and j, inclusive, sequences.
\{i,\} Matches more than or equal to i sequences.
\{i,j\} Matches between i and j, inclusive, sequences.
\{i,\} Matches more than or equal to i sequences.
линк
это немного оффтоп, хотя и связано с FB2, и почти скрипт (кхе-кхе). нашла на днях себя calibre - эдакая программа управления своей библиотекой. мне понравилась, сижу "разбираюсь"
calibre вещь хорошая, когда книги в разных форматах, это мощный комбайн, но только для FB2 его использовать неэффективно.
ОФФТОП
С Либрусека ушел на Flibusta. Ничего не имею против монетизации Ларина (кто же кушать не хочет).
С Либрусека ушел на Flibusta. Ничего не имею против монетизации Ларина (кто же кушать не хочет).
Спасибо, а то все руки не доходили разобрать сказанную базу именно с либрусека именно по причине муторности этого занятия
:-) ) Восхитило - Пратчетт Плоский мир 1 Тсвет волсхебства.fb2
:-) ) Восхитило - Пратчетт Плоский мир 1 Тсвет волсхебства.fb2
Для работы с FB2 лучше использовать MyRulib и никакие скрипты не понадобятся. Скрипт №2 ваще не нужен, все читалки прекрасно читают архивы.