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-23 01:36 pm (UTC)
ext_1262629: (Default)
From: [identity profile] cats-shadow.cats-home.net
Тут скорее важен идентификатор, к которому можно привязаться. Чтоб разложить по каталогам свалку автоматически.

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

Profile

vitus_wagner: My photo 2005 (Default)
vitus_wagner

August 2025

S M T W T F S
     1 2
3456789
10111213141516
17181920212223
24252627282930
31      

Most Popular Tags

Page Summary

Style Credit

Expand Cut Tags

No cut tags
Page generated Aug. 3rd, 2025 07:55 pm
Powered by Dreamwidth Studios