GNU/Linux >> Tutoriales Linux >  >> Linux

¿Cómo ejecutar automáticamente un script cuando cambia el contenido de un directorio en Linux?

Solución 1:

Si tiene la suerte de estar en una distribución basada en Debian, apt-get install dnotify . Otras distribuciones probablemente tengan algo similar:busque el dnotify nombre.

dnotify es un programa simple basado en la API dnotify de Linux kernel 2.4.19+. dnotify puede ejecutar un comando específico cada vez que cambia el contenido de un directorio específico. Se ejecuta desde la línea de comandos y toma dos argumentos:uno o más directorios para monitorear y un comando para ejecutar siempre que un directorio haya cambiado. Las opciones controlan qué eventos activar:cuándo se leyó un archivo en el directorio, cuándo se creó, eliminó, etc.

Si desea manejar esto dentro de su propio programa, dnotify también es la API que desea usar.

Solución 2:

Puede ejecutar un script con inotify-tools, algo como esto. Observará el directorio en busca de cambios en archivos modificados, archivos nuevos y archivos eliminados, luego ejecutará el script.

#!/bin/sh
while inotifywait -e modify -e create -e delete /home/me/code; do
    rsync [options] /home/me/code/ /media/nfs/code/ 
done

Solución 3:

incron es básicamente lo que quieres, creo. Utiliza inotify como mecanismo de notificación (que, como han señalado otros, reemplaza a dnotify), pero no requiere un script que se ejecute continuamente, usando inotifywait o similar (aunque, obviamente, el demonio incron se ejecuta todo el tiempo). Los 'crontabs' de todo el sistema y los 'crontabs' de usuario son compatibles de manera similar al cron estándar, pero en lugar de especificar tiempos como activadores, se utilizan eventos de notificación y nombres de archivos/directorios.

incron está empaquetado para muchas distribuciones, incluidas Ubuntu y Debian, creo.


Linux
  1. Cómo encontrar el archivo más antiguo en un árbol de directorios en Linux

  2. ¿Cómo ejecutar comandos bash de Linux en un script PERL?

  3. ¿Cómo ejecutar el script de python en la terminal (ubuntu)?

  4. ¿Cómo ejecutar un script en segundo plano (linux openwrt)?

  5. linux:cómo ejecutar un comando en un directorio dado

Cómo cambiar automáticamente a un directorio sin usar el comando Cd en Linux

Cómo ejecutar todos los scripts en un directorio en Linux

Cómo ver el contenido de un archivo o archivo comprimido en Linux

Cómo encontrar el tamaño total de un directorio en Linux

Cómo ejecutar Shell Script como servicio SystemD en Linux

Cómo migrar el directorio HOME en Linux