Organizar imágenes con Bash

Recientemente estuve organizando muchas fotos que tenía copiadas en un directorio, las organizo por año y mes en un esquema ejemplo: 2014-04; y dentro de dicho directorio, guardo todas las imágenes asociadas a dicha fecha.

Para revisar la información de una imagen a través de la shell se puede usar una herramienta llamada exif, que se usa de manera básica de la siguiente manera:

exif imagen.jpg

En la información que suministra el programa, existe un campo llamado Date and Time (Origi, que indica la fecha exacta en que fue creada una imagen y lo uso para filtrar específicamente el orden que quiero darle a las imágenes.

Una vez teniendo en cuenta el programa exif y el campo que quiero asociar para crear mi organización de directorios, usé el siguiente script:

#!/bin/bash

ls | egrep "*.jpg|*.JPG" | while read LINEA
do
  FECHA=$(exif ${LINEA} | grep Origi | awk '{print $4}' | cut -d"|" -f2 | cut -d":" -f1,2)
  DIRANO=$(echo ${FECHA} | cut -d":" -f1)
  DIRMES=$(echo ${FECHA} | cut -d":" -f2)
  if [ "${FECHA}" ]; then
     if [ ! -d "$DIRANO-$DIRMES" ]; then
        mkdir $DIRANO-$DIRMES
     fi
     for i in 01 02 03 04 05 06 07 08 09 10 11 12
     do
         for j in 2007 2008 2009 2010 2011 2012 2013 2014
         do
             if [ "$FECHA" == "$j:$i" ]; then
                mv ${LINEA} ${j}-${i}/.
             fi
         done
     done
  fi
done

exit 0

En él, establecí dos ciclos for para mes y año, en el mes del 01 al 12, pero en el año un rango hipotético o entre las fechas que pudiese haber creado mis fotos. Automáticamente el script chequea si existe un directorio asociado a la fecha de creación de una imagen, si no existe, se crea el directorio y envía las imágenes que coincidan con esa fecha.

Usé también una herramienta muy versátil, el egrep que me permite hacer filtros con expresión regular. El script le di permisos de ejecución y lo ejecuté dentro del directorio donde están las imágenes, se pueden agregar más tipos de archivos de imagen en las filtraciones, por ejemplo:

ls | egrep "*.jpg|*.JPG|*.png|*.PNG"

Es cuestión de adaptar el algoritmo a las necesidades.

Advertisements
This entry was posted in Bash. Bookmark the permalink.

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s