#!/bin/bash
verbose=0
if [ "$1" == "-v" ]; then
	verbose=1
	shift
fi
tmpdir=`mktemp -d "${1-.}/.FB2-XXXXXX"`
find "$@" -path "$tmpdir" -prune -o \( -type f -name "*.fb2" -print \) | \
while read i; do
	tempfile=`mktemp -p "$tmpdir"`
	tempfile2=`mktemp -p "$tmpdir"`
	if XMLLINT_INDENT="" xmllint --encode UTF-8 --format "$i" 2>/dev/null >$tempfile; then
		xml2 < $tempfile | grep title-info | grep '/author$\|=' > $tempfile2 
		author=`2csv < $tempfile2 author last-name first-name middle-name nickname | sed 's@,\+@_@g;s,_$,,;s,^$,_,' | head -n 1`
		title=`2csv < $tempfile2 title-info book-title | head -n 1 | sed 's,["/],,g;s, \+,_,g;s,^_,,'`
		name="${author}_${title}.fb2"
		count=
		newname="$name"
		mkdir -p "$tmpdir/$author"
		while [ -e "$tmpdir/$author/$newname" ]; do
			count=$((count+1))
			newname="${name%.fb2}${count}.fb2"
		done
		if [ $verbose -eq 1 ]; then
			echo `basename "$i"` '->' "$newname"
		fi
		cp $tempfile "$tmpdir/$author/$newname"
		rm "$i"
	else
		echo Error: `basename "$i"` 1>&2
	fi
	rm $tempfile $tempfile2
done