vitus_wagner: My photo 2005 (Default)
[personal profile] vitus_wagner
Превратил жуткую свалку fb2 и epub-файлов, в которой мог разобраться только FBReader, да и то не сразу, в более-менее структуруированное хранилище,
вида перваябуква/автор/название

Была еще идея насоздавать симлинков для книг с более чем одним автором, но решил пока не связываться.

Большую часть работы проделал вот такой скрипт:
for i in *.fb2.zip; do

   author="`unzip -p $i "*.fb2"| xmlstarlet sel \
     -t -m "//_:title-info/_:author[1]" \
     -v _:last-name -o "_" -v _:first-name -n
   `"
   title="`unzip -p $i "*.fb2"|  xmlstarlet sel -t \ 
        -v "//_:title-info/_:book-title" | tr ' ' '_'`"
   dir=`echo "$author"|sed 's!^\(.\)!\1/\1!'` 
   echo "$i => $dir/${title}.fb2.zip"
   [ -d "$dir" ] || mkdir -p "$dir"
   
   mv $i "$dir/${title}.fb2.zip"
done


Скрипт, конечно наколеночный и кривой. Поддержки epub пока нет, хотя смысл там примерно
 unzip -p $epub_file content.opf |
   xmlstarlet sel -N dc=http://purl.org/dc/elements/1.1/ \
   -t -v '//dc:creator[1]' -n -v //dc:title  -n
.
Ну и еще файл сканируется дважды. Но я решил что проще это делать дважды, чем
разгребаться с эскейпингом средствами xslt.

О, кстати придумал как обойтись без искейпинга. Вывод xmlstarlet который пишет автора на первой строчке, а title во второй, перенаправляем в
(read author
read title
# do what we need with author and title
)
. В результате внутри xmlstarlet нужно заэскейпить только ньюлайны.

P.S. А если для фотографий аналогичный скрипт сделать? Чтобы валить их все в кучу, чуть ли не rsync-ом, а скрипт пусть потом разгребает по датам и местам.

Date: 2017-01-22 07:54 pm (UTC)
ext_1480035: (Default)
From: [identity profile] self-perfection.ya.ru
Была еще идея насоздавать симлинков для книг с более чем одним автором, но решил пока не связываться.

Народ для доступа средствами файловой системы к подмножествам набора файлов, выбранным по различным критериям метаданных, пилит штуку под названием tagsistant. На мой вкус вещь странная, и я не придумал, где мне было бы удобно её использовать, но оцениваю шанс что вам понравится в 30%

Как минимум можно будет видеть одну и ту же книгу в директориях .../store/Автор1 и .../store/Автор2 можно будет без ручного создания симлинков, если прикрутить к tagsistant извлечение из fb2 файлов метаданных (AFAIK, пока поддерживает только аудиофайлы и изображения)

Date: 2017-01-22 08:34 pm (UTC)
ext_1480035: (Default)
From: [identity profile] self-perfection.ya.ru
Пример, который на симлинках было бы решить трудно: хотим книги, среди авторов которых есть Автор1, но отсутствует Автор2.

Средствами tagsistant это делалось бы примерно так:
ls "$TAGSISTANT_ROOT/Автор1/-/Автор2/@/"

tagsistant даёт куда больше гибкости. Цена за эту гибкость - установка и изучение странной херни. Мне эта цена показалась существенно выше выгоды, я не использую. После вашего ответа я почти уверился, что вам тоже не захочется.

Но некоторое восхищение людьми, которые пытаются упихнуть неупихуемое в стандартные интерфейсы всё же у меня есть.

Date: 2017-01-23 09:50 am (UTC)
yurikhan: (Default)
From: [personal profile] yurikhan
В пределе такие юзкейсы ведут к мечтам об онтологиях, семантическом вебе и RDF.

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

July 2025

S M T W T F S
  12345
6789 1011 12
13141516 17 1819
20212223 242526
272829 3031  

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 30th, 2025 07:16 pm
Powered by Dreamwidth Studios