inotify-tools o automatizar tu sistema de archivos

Ya he publicado varios artículos en los que hago uso de inotify-tools para poner en marcha diferentes automatizaciones. Así por ejemplo puedes leer sobre esta herramienta en este artículo sobre sincronización bidireccional, o escucharme en el podcast sobre google drive en la Raspberry. Sin embargo, hasta el momento, no le he dedicado ningún artículo a esta poderosa herramienta de automatización. Así, en este artículo vas a poder leer sobre inotify-tools y que puedes hacer con esta herramienta para mejorar tu productividad y aumentar la automatización de procesos.

Pero, en pocas palabras, y sin irme por las ramas ¿que es inotify-tools? Una herramienta que te va a permitir vigilar lo que sucede en tu sistema de archivos y actuar ante determinados eventos. Por ejemplo, que se cree un archivo nuevo en un directorio, o que modifique un archivo, etc. Cualquiera de estas acciones generará un evento, ante el cual, tu podrás tomar acciones. Así que ya puedes ver el increíble potencial de esta herramienta…

inotify-tools o automatizar tu sistema de archivos

inotify-tools

inotify-tools es una librería implementada en C por Rohan McGovern y mantenida actualmente por Radu Voicilas. Se trata de un conjunto de programas para utilizarlos en el terminal. Y no son, ni mas ni menos, que un interfaz para inotify.

Sonbre inotify

Inotify (inode notify) es un subsistema del núcleo de Linux que actúa extendiendo el sistema de archivos de forma que se notifique cualquier cambio que se produzca en el mismo, y además informando a otras aplicaciones sobre esos cambios.

Inotify fue creado por John McCutchan, y comenzó a formar parte del núcleo de Linux en la versión 2.6.13, que fue liberado en Agosto de 2015.

La gran ventaja o utilidad de Inotify es que se puede utilizar para actualizar la vista de directorios, recargar archivos de configuración, registrar cambios en logs, realizar copias de seguridad, sincronizaciones y cargas.

Esta herramienta es perfecta para automatizar todos tus procesos relativos al sistema de archivos.

Instalando inotify-tools

inotify-tools se encuentra en los repositorios oficiales de Ubuntu, y por supuesto de muchas otras distribuciones. Por ello, su instalación es tan sencilla como ejecutar,

sudo apt install inotify-tools

Sobre la herramienta

inotify-tools consiste en básicamente en tres elementos,

  • libinotifytools, que es una libraría que proporciona una delgada capa situada sobre la interfaz de inotify. El uso principal de esta librería es el de facilitar el trabajo con inotify estableciendo monitorización sobre archivos y lectura de eventos sin que sea necesario trabajar a muy bajo nivel.
  • inotifywait este comando simplemente bloquea la ejecución a la espera de eventos, haciéndolo ideal para su utilización en scripts. Esta es precisamente una de las características que tanto me atraen de esta herramienta, y es que utilizándola en combinación con el tutorial de scripts en Bash, le puedes sacar, realmente, mucho potencial. No solo esto, sino que además te permite monitorizar directorios o directorios de directorios o directorios de directorios de directorios o…. completos, de forma que puedes estar perfectamente informado de lo que está ocurriendo y en caso de necesidad actuar de forma completamente automatizada.
  • inotifywatch se encarga re recoger estadísticas de uso de tu sistema de archivos. Así tu puedes establecer un tiempo de monitorización, al final del cual inotifywatch te mostrará esas estadísticas de uso.

Algunos ejemplos

Inotifywait

Este primer ejemplo ya lo he expuesto en alguna que otra ocasión, pero me parece muy descriptivo de las posibilidades de esta herramienta. Simplemente se trata de monitorizar un directorio. En el caso de que se cree un nuevo archivo en ese directorio con formato JPG, este lo convierte a PNG.

#!/bin/bash
while inotifywait -e create --format "*.jpg" --timefmt %d-%m-%Y ~/imagenes >> out.log  2>&1
do
    for i in ~/imagenes/*.jpg
    do
        png=${i/.jpg/.png}
        if [ ! -e "$png" ];then
            convert $i $png
        fi
    done
done

Por supuesto que al igual que lo haces con imágenes, también lo puedes hacer con vídeo. Así, si descargas algún vídeo de YouTube a un directorio que lo tengas monitorizado con inotifywait, este se convertirá directamente a mp3. Por ejemplo,

#!/bin/bash
while inotifywait -e create --format "*.mp4" --timefmt %d-%m-%Y ~/descargas >> out.log  2>&1
do
    for i in ~/descargas/*.mp4
    do
        mp3=${i/.mp4/.mp3}
        if [ ! -e "$mp3" ];then
            ffmpeg -i $i -f mp3 -ab 192000 -vn $mp3
        fi
    done
done

Aquí solo pone límite tu imaginación para automatizar o monitorizar cualquier proceso que consideres. Así, por ejemplo, si lo que quieres es saber si alguien escribe en un directorio, y estar continuamente informado, lo puedes hacer. Para ello, puedes enviarte un mensaje de Telegram a un chat, cada vez que se haga cualquier modificación. Para esto, haciendo uso del artículo de Ángel en uGeek sobre crear un bot de Telegram con Bash y en una sola línea, puedes hacer un script como el que te muestro a continuación,

#!/bin/bash
while inotifywait -e create --format "*.mp4" --timefmt %d-%m-%Y ~/Descargas >> out.log  2>&1
do
    curl -s -X POST https://api.telegram.org/bot"30534591:AAH5d23KtktfTQSWJMT9CiuginbsFQiF_2nB4"/sendMessage -d chat_id="57384545" -d text="Archivo creado"
done

Evidentemente tienes que modificar tanto el token utilizado como el identificador del chat al que envias el mensaje. Mas que nada por si todos estamos utilizando el mensaje al chat privado de Ángel 😉.

inotifywatch

Como te indicaba anteriormente inotifywatch te permite obtener estadísticas de uso de un determinado archivo o directorio durante un período de tiempo a indicar por ti.

Así, por ejemplo, he monitorizado durante sesenta segundos lo que se produce en mi directorio de artículos de 2019. Aunque, solo para algunos eventos. Así, el resultado es el siguiente,

$ inotifywatch -v -e access -e modify -t 60 -r /datos/Sync/atareao.es/articulos/2019

Establishing watches...
Setting up watch(es) on /datos/Sync/atareao.es/articulos/2019
OK, /datos/Sync/atareao.es/articulos/2019 is now being watched.
Total of 45 watches.
Finished establishing watches, now collecting statistics.
Will listen for events for 60 seconds.
total  access  modify  filename
88     88      0       /datos/Sync/atareao.es/articulos/2019/
13     3       10      /datos/Sync/atareao.es/articulos/2019/45 - inotify/
2      2       0       /datos/Sync/atareao.es/articulos/2019/11 - Station/

Esto te permite hacerte una idea de las posibilidades de esta herramienta, en lo que a monitorización se refiere.

Conclusión

Esto solo es la punta del iceberg de todo lo que puedes hacer con esta herramienta. Aquí, como te digo en mas de una ocasión, solo le pone límite tu imaginación, y las muchas o pocas ganas que puedas tener de probar y experimentar. Como te digo, combinado con el tutorial de scripts en Bash, esto es una fuente inagotable de diversión, entretenimiento y sobre todo mucha productividad.


Más informacióón

Imagen de portada de Maksym Kaharlytskyi en Unsplash

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *