Навел порядок в своей библиотеке.
Jan. 22nd, 2017 11:32 am![[personal profile]](https://www.dreamwidth.org/img/silk/identity/user.png)
Превратил жуткую свалку fb2 и epub-файлов, в которой мог разобраться только FBReader, да и то не сразу, в более-менее структуруированное хранилище,
вида перваябуква/автор/название
Была еще идея насоздавать симлинков для книг с более чем одним автором, но решил пока не связываться.
Большую часть работы проделал вот такой скрипт:
Скрипт, конечно наколеночный и кривой. Поддержки epub пока нет, хотя смысл там примерно
Ну и еще файл сканируется дважды. Но я решил что проще это делать дважды, чем
разгребаться с эскейпингом средствами xslt.
О, кстати придумал как обойтись без искейпинга. Вывод xmlstarlet который пишет автора на первой строчке, а title во второй, перенаправляем в
P.S. А если для фотографий аналогичный скрипт сделать? Чтобы валить их все в кучу, чуть ли не rsync-ом, а скрипт пусть потом разгребает по датам и местам.
вида перваябуква/автор/название
Была еще идея насоздавать симлинков для книг с более чем одним автором, но решил пока не связываться.
Большую часть работы проделал вот такой скрипт:
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-ом, а скрипт пусть потом разгребает по датам и местам.
no subject
Date: 2017-01-23 11:11 am (UTC)Угу. Можно. Но смысл? Только умножение сущностей. Одно дело, когда это в на флибусте. И другое, когда в личной библиотеке, где скрипт прошёлся и наплодил авторов из одного, потому что разное количество пробелов между именем и фамилией, или символ не из той раскладки затесался.
Вот как раз думаю над тем, как сделать автоматическое сведение и исправление. По сути -- поиск похожего в авторах/названиях. Или вводить поле "оригинальное имя автора на его родном языке" и сортировать по нему.
no subject
Date: 2017-01-23 01:10 pm (UTC)С оригинальным именем автора на его родном языке тоже могут быть сложности. Поскольку во многих культурах понятие имени может существенно отличаться. И вообще Игорь Можейко и Кир Булычев это четыре автора или два?
no subject
Date: 2017-01-23 01:36 pm (UTC)Иначе - действительно базу данных делать, чтоб выяснить, что "это не муж и жена, а три разных человека". Потому что ещё и однофамильцы и полные тёзки встречаются.
no subject
Date: 2017-01-23 01:48 pm (UTC)