Aquí dejo un script para modificar/consultar los metadatos de una biblioteca de libros-e.
La idea base es que puedo partir de una biblioteca organizada con subdirectorios y modificar/consultar todos los libros-e.
Para casos más sencillo basta con ebook-meta del que este script es tan solo un ‘wrapper’.
#!/bin/bash # # libros-e_metadata.sh # Por Guimi 2013/01 - http://www.guimi.net # #################################### # REQUISITOS # calibre -> ebook-metadata #################################### #### ERRORES E_PARAMINVAL=64 # Parametro invalido #################################### #### AYUDA muestra_ayuda () { echo "Use `basename $0` -h para ver la ayuda" >&2 } muestra_ayuda_larga () { more << EOF libros-e_metadata.sh (c) 2013 Guimi (http://guimi.net) This software is under the GNU Public License (GPL) v.2 Este script utiliza ebook-meta (calibre) para modificar y mostrar metadatos de ficheros epub de forma recurrente (subdirectorios) Options: --------- -a --auto Utiliza el nombre del fichero para escribir el autor y titulo del libro en los metadatos Presupone el siguiente formato de nombre de archivo: autor-titulo.epub Ademas presupone que [autor] es: [1er apellido]_[resto] o [solo una palabra] Ejemplos: Platon-Escritos_completos.epub Sagan_Carl-Cosmos-ed.aniversario.epub -h --help Muestra esta ayuda -l --limpia Borra los metadatos de los campos comentarios, titulo de orden, productor y publicación -m [metadatos] --metadatos [metadatos] Escribe los metadatos dados, utilizando ebook-meta (ver ebook-meta --help) La cadena de metadatos debe estar entrecomillada Ejemplo: libros-e_metadata.sh -m "-l es -c 'Excelente libro'" -v --verbose Muestra todos los metadatos EOF } #################################### # PARAMETROS # Parámetros por omisión string_parametros="" # Comprobacion de parametros while [ $# -gt 0 ]; do # Mientras tenemos parámetros... case "$1" in -a|--auto) # Escribe metadatos a partir del nombre de fichero AUTO='0' ;; -h|--help) # Muestra la ayuda larga muestra_ayuda_larga exit 0 ;; -l|--limpia) # Limpia algunos metadatos LIMPIA='0' ;; -m|--metadatos) # Escribe metadatos # Comprobando si hay mas parámetros if [ -z "$2" ] then echo "Error: Falta la cadena de metadatos" >&2 muestra_ayuda exit $E_PARAMINVAL else string_parametros="$2" shift fi ;; -v|--verbose) # Muestra todos los metadatos VERBORREICO='0' ;; -*) # Parametro desconocido echo "Error: Parametro desconocido $1" >&2 muestra_ayuda exit $E_PARAMINVAL ;; esac shift # Pasar al siguiente parámetro done #################################### # BUCLE PRINCIPAL # Listamos los ficheros, incluidos subdirectorios # # Modificamos el separador de archivos (IFS), por si algun fichero contiene espacios en el nombre SAVEIFS=$IFS IFS=$'\n' # Realizamos el bucle for x in `find . -type f -iname "*.epub" | sort` do # Limpiamos la cadena de comando del bucle anterior (si lo hubiere) string_comando="" # COMPROBAMOS SI HEMOS DE ESCRIBIR AUTOR Y TITULO A PARTIR DEL NOMBRE DEL FICHERO if [ -n "$AUTO" ] then # Tomamos los datos del nombre del fichero nombre_base=$(basename "$x") nombre_base="${nombre_base%.*}" libro_autor="${nombre_base%%-*}" libro_autor_esp="${libro_autor//_/ }" libro_autor_apellido="${libro_autor_esp%% *}" libro_autor_resto="${libro_autor_esp#* }" libro_autor_largo="$libro_autor_resto $libro_autor_apellido" libro_autor_orden="$libro_autor_apellido, $libro_autor_resto" libro_titulo="${nombre_base#*-}" libro_titulo_esp="${libro_titulo//_/ }" #echo "[$libro_autor_largo] [$libro_autor_orden] [$libro_titulo]" # Anotamos los parametros para el conversor string_comando="-a '$libro_autor_largo' --author-sort '$libro_autor_orden' -t '$libro_titulo_esp' --title-sort ''" fi # COMPROBAMOS SI HEMOS DE LIMPIAR METADATOS if [ -n "$LIMPIA" ] then # Anotamos los parametros para el conversor string_comando=$string_comando" -c '' -p '' -k '' -d '' --title-sort ''" fi # COMPONEMOS LA ORDEN E INDICAMOS POR QUÉ FICHERO VAMOS if [ -n "$VERBORREICO" ] then comando="ebook-meta $string_comando $string_parametros '$x'" echo "----------- $x ----------" else if [ "$string_comando" == "" ] && [ "$string_parametros" == "" ] then comando="ebook-meta '$x' | grep -e Title -e Author -e Language" echo "----------- $x ----------" else comando="ebook-meta $string_comando $string_parametros '$x' > /dev/null" echo "$x ..." fi fi # LANZAMOS EL CONVERTIDOR eval $comando done # Restauramos el separador de archivos (IFS) IFS=$SAVEIFS #################################### # Terminamos exit 0