jueves, 3 de marzo de 2011

Procesando ficheros

Ayer me surgió la necesidad de procesar un montón de ficheros, distribuidos por diferentes directorios. En concreto, tenía que generar un fichero JPEG a partir de un PDF.


Dividimos la tarea en dos partes: por un lado, extraer la lista de ficheros que queremos procesar. Por el otro, el comando que los procesa en sí.


El resultado sería algo como esto:



find . -type f -name "*.pdf" | while read i ; do convert -geometry 100x135 -quality 80 $i `dirname $i`/`basename $i .pdf`.jpg; done

La lista de ficheros la generamos a partir de un find: find . -type f -name "*.pdf" (suponiendo que estemos ubicados en el directorio a partir del que vamos a buscar los ficheros para procesar.


El bucle de procesado sería: while read i ; do COMANDO_PROCESADO; done.


En nuestro caso, el comando de procesado es la herramienta convert: convert -geometry 100x135 -quality 80 $i `dirname $i`/`basename $i .pdf`.jpg. Lo que hace es generar una miniatura en JPEG de 100x135px y 80 de calidad alojada en el mismo directorio que el PDF original.


Ahora imaginemos que lo que necesitamos es modificar la ruta, no el nombre del fichero. Lo podemos lograr usando sed:



find . -type f -name "*.jpeg" | while read i ; do echo convert -geometry 74x74 -quality 80 $i `echo $i | sed 's/RUTA1/RUTA2/g'`; done

En el ejemplo, sustituimos RUTA1 por RUTA2 en el nombre del fichero destino.

No hay comentarios:

Publicar un comentario