Monitorización de directorios en Ubuntu

Desde hace bastante tiempo que utilizo Picasa Web como el lugar donde almacenar las imágenes que muestro en este sitio. Sin embargo, hay dos asuntos que me tienen algo preocupado. Por un lado, el hecho de que se pueden perder todas las imágenes, y por el otro mejorar la respuesta del sitio.

Una alternativa es utilizar un servicio de almacenamiento tipo Copy, Dropbox, Box, Drive, etc, para guardar las imágenes. Sin embargo, es necesario, el trabajo que Picasa Web hace de forma automática, como es la generación de miniaturas, es necesario hacerlo de forma manual, o buscar una solución para automatizarlo.

Llegados a este punto, es cuando surge la posibilidad de monitorizar directorios en Linux, de forma que cuando copie una imagen en un determinado directorio, de forma automática, esta se mueva a otro directorio, por ejemplo en Dropbox y a la vez me genere una miniatura. Así es como utilicé la monitorización de directorios.

Monitorización de directorios en Ubuntu

Monitorizando

El concepto

La idea es utilizar tres directorios, uno donde guardo los scripts para copiar y borrar archivos, y generar miniaturas, otro donde guardo las imágenes original, y un tercero para guardar las miniaturas.

Monitorización de directorios en Ubuntu

Así cuando copio una imagen en el directorio principal, se copia la imagen al subdirectorio original y se crea una copia en el subdirectorio thumbnail.

Incron

Para la monitorización de directorios utilizo Incron, que es un demonio encargado de la monitorización de archivos y directorios.

El primer paso es añadir instalar el paquete, para ello, desde un terminal, ejecutamos el siguiente comando,


sudo apt-get install incron

El siguiente paso es permitir que nuestro usuario pueda trabajar con incron, para ello, ejecutaremos editaremos el archivo /etc/incron.allow y añadiremos nuestro usuario al mismo, en mi caso atareao. Otra opción es que sea el administrador, root el que se encargue de este trabajo.

Una vez hecho esto ahora nos queda añadir los directorios a monitorizar, y las acciones a tomar en los casos que indiquemos. Para esto, ejecutaremos el siguiente comando,


incrontab -e

y añadiremos las instrucciones


home/atareao/Dropbox/Public/web/images IN_CREATE,IN_MOVED_TO /home/atareao/Dropbox/Public/web/images/scripts/create_thumbnail $@/$#
/home/atareao/Dropbox/Public/web/images/original IN_DELETE,IN_MOVED_FROM /home/atareao/Dropbox/Public/web/images/scripts/delete_thumbnail $@/$#

La primera de las sentencias indica que vamos a monitorizar el directorio home/atareao/Dropbox/Public/web/images, y que en caso de crear, IN_CREATE, o mover, IN_MOVED_TO un archivo a este directorio ejecutaremos el script create_thumbnail al que le pasaremos como parámetro $@/$#, que es el directorio y nombre del archivo separado por una barra /.

La segunda, monitoriza el directorio /home/atareao/Dropbox/Public/web/images/original para que en el caso de borrar, IN_DELETE o mover IN_MOVED_FROM un archivo inmediatamente se ejecute el script delete_thumbnail

Si en algún momento queremos ver las instrucciones que hemos añadido, simplemente tenemos que ejecutar el siguiente comando, que nos listará las instrucciones,


incrontab -l

Ambos scripts se encuentran en su correspondiente directorio…

Monitorización de directorios en Ubuntu

El script create_thumbnail es el encargado de mover las imágenes a su directorio original y crear la correspondiente miniatura en el directorio thumbnail,


#!/bin/bash
path=$(dirname "$1")
origen=$(basename "$1")
extension="${origen##*.}"
filename="${origen%.*}"
destino="$path"/original/"$origen"
thumbnail="$path"/thumbnail/"$origen"
origen="$path"/"$origen"
echo "$origen"
echo "$thumbnail"
if [ $extension == "png" ]
then
	if [ ! -f "$thumbnail" ]
    then
        /usr/bin/convert -thumbnail 288  "$origen" "$thumbnail"
    fi
    if [ ! -f "$destino" ]
	then
		cp "$origen" "$destino"
	fi
	if [ -f "$origen" ]
    then
        rm -f "$origen"
    fi
fi

Al borrar un archivo del directorio original también queremos que se borre del directorio de miniaturas thumbnail, para ello el código que se ejecutará será el siguiente,


#!/bin/bash
path=$(dirname "$1")
maindir=$(dirname "$path")
origen=$(basename "$1")
extension="${origen##*.}"
filename="${origen%.*}"
thumbnail="$maindir"/thumbnail/"$origen"
if [ $extension == "png" ]
then
	if [ -f "$thumbnail" ]
    then
        echo "rm" "$thumbnail"
		rm "$thumbnail"
    fi
fi

Conclusiones

Este es un sencillo ejemplo de lo que podemos hacer con incron, una poderosa herramienta que puede ayudarnos considerablemente a mejorar el orden en nuestro equipo. Por ejemplo, si todas nuestras descargas van a un mismo directorio, podemos redirigirlas cuando se haya completado la descarga para que según la extensión vaya a un determinado directorio, mejorando de esta forma el orden en nuestro equipo. En fin, como ves las posibilidades son innumerables.

 

Más información: Incron | Linux for SysAdmin | Geek’s Trory | chris77.org

Fuente: atareao

¿Quién está en línea?

Hay 24425 invitados y ningún miembro en línea