Hiparco

Recetas y trucos de GNU/Linux e informática en general

Alojado en http://guimi.net

Convierte libros-e

Aquí dejo un script para convertir una biblioteca de libros-e al formato epub (o al que se quiera).
La idea base es que puedo partir de una biblioteca organizada con subdirectorios y convertir todos los libros-e al formato deseado sin alterar la estructura y guardando copia de los originales en una estructura nueva copiada de la antigua.
Para casos más sencillo basta con ebook-convert del que este script es tan solo un ‘wrapper’.

#!/bin/bash
#
# libros-e_convierte.sh
# Por Guimi 2013/01 - http://www.guimi.net
#

############
# REQUISITOS
# calibre -> ebook-convert

# Extensiones a convertir
#extensiones="pdf epub txt png jpg jpeg bmp doc docx djvu"
extensiones="rtf lit fb2 mobi"

# Contadores estadísticos
contador_total=0
contador_ok=0
contador_no=0

# Tomamos el directorio inicial, ya que trabajaremos con subdirectorios
directorio_base=$(pwd)

# Generamos un directorio donde guardar los originales.
# Este directorio está fuera de nuestra ruta, así podemos ejecutar repetidas veces el script sin volver a convertir los archivos
mkdir ../originales

# Listamos los ficheros, incluidos subdirectorios
for x in `find . -type f | sort`
do
	# Incrementamos contador estadístico
	let contador_total=contador_total+1

	# Primero hemos de tomar el directorio, el nombre y la extensión
	directorio=$(dirname "$x")
	nombre_base=$(basename "$x")
	extension="${nombre_base##*.}"
	nombre_base="${nombre_base%.*}"
	#echo "$directorio | $nombre_base | $extension"

	# Comprobamos si la extensión del fichero es una de las buscadas
	[[ $extensiones =~ $extension ]] && reconocido=0 || reconocido=1
	# Convertimos el fichero
	if [ $reconocido -eq 0 ]
	then
		echo  -n "Convirtiendo $x..."
		# Cambiamos al directorio del fichero, si no ebook-convert no trabaja bien (!?)
		cd $directorio
		# Hacemos una conversión silenciosa y tomamos la salida (ejecución terminada con éxito o con error)
		ebook-convert $nombre_base.$extension $nombre_base.epub > /dev/null 2> /dev/null
      	SALIDA=$?
		# Volvemos al directorio de trabajo
		cd $directorio_base

		# Comprobamos si la conversión ha sido exitosa
      	if [ "$SALIDA" -gt 0 ]
      	then
			# Incrementamos contador estadístico
			let contador_no=contador_no+1
			echo " ERROR!!!"
		else
			# Incrementamos contador estadístico
			let contador_ok=contador_ok+1
			echo " ok"
			# Generamos el mismo arbol de directorios para lo originales y movemos el archivo
			mkdir ../originales/$directorio -p 2> /dev/null
			mv $directorio/$nombre_base.$extension ../originales/$directorio/$nombre_base.$extension
      	fi
	fi
done

# Mostramos unas pequeñas estadísticas
echo ""
echo "Total ficheros: $contador_total | Convertidos: $contador_ok | Con error: $contador_no"

# Terminamos
exit 0