La estructura de este script es similar al anterior. En lugar de usar stat vamos a usar la suma sha1 (sha1sum) de algopara controlar si algo ha cambiado o no. La línea clave en este script es cuando asignamos el valor de NEW_SUM, veámoslo:

  • find $DIR_TO_CHECK/* \! -path "$PATH_TO_EXCLUDE" -print0: Primero obtenemos una lista de todos los ficheros en el directorio con find. Utilizando el parámetro -path precedido de \! le decimos a find que excluya la ruta especificada. Puedes especificar más de una ruta repitiendo esa misma estructura (\! -path $PATH_1 \! -path $PATH_2 ...). Utiliamos -print0 para forzar a find a que separe los nombres de archivos con un carácter nulo, en lugar de un retorno de línea (necesitamos que sea así para pasar los datos a xargs a través del pipe).
  • xargs -0 du -b --time --exclude=$PATH_TO_EXCLUDE: Obtenemos una lista de todos esos ficheros (excluyendo la ruta o rutas que queramos ignorar) con su uso de disco (tamaño), y un día y hora de última modificación. Es decir, cada línea de la salida de este comando tiene la forma “<tamaño> <día>”.
  • sort -k4,4: Ordenamos la lista previa por el cuarto campo, que es la ruta completa del fichero o directorio. Esta lista ordenada, de algún modo, refleja el “estado” de todo el directorio. Si un fichero o directorio es añadido, eliminado, o renombrado, o el tamaño o tiempo de modificación de cualquier línea en esta lista cambia, esta lista reflejará dicho cambio.
  • sha1sum: Una suma (por ejemplo la suma sha1) del la lista anterior es una manera de “codificar” el estado de nuestro directorio (excluyendo lo que queramos excluir). Así pues, en este punto, al hacer la sha1sum de esta lista obtenemos un dato que codifica de alguna manera un estado concreto del directorio.
  • awk '{print $1}': Hacemos esto simplemente para limpiar un poco la salida de sha1sum.

Esto es todo. Cada vez que se ejecute el script, calculará esta suma clave. Si la suma actual difiere de la vieja (que se leyó del fichero), podemos estar seguros de que algo cambió en el directorio.