2 votos

Supervisar el contenido de las carpetas con launchd - ¿Incluyendo las subcarpetas?

Quiero hacer un shell script que se ejecute cada vez que se cambie el contenido de una carpeta concreta de mi servidor. Parece bastante fácil al principio, porque launchd tiene una directiva llamada WatchPaths que activa su script cada vez que cambia el contenido de una carpeta.

SIN EMBARGO WatchPaths no se activa por los cambios en las subcarpetas. La carpeta que estoy tratando de vigilar tiene unos cientos de MB de pequeños archivos web, anidados en varios niveles de profundidad en subcarpetas. Demasiadas carpetas para intentar listar manualmente cada una de ellas.

¿Hay algún otro sano ¿la manera de lograrlo?

4voto

slm Puntos 118

WatchPaths no parece ser capaz de vigilar un sub-directorio de forma recursiva, así que lo mejor que puedes hacer con él es vigilar las actividades de un solo directorio. Puede que quieras echar un vistazo a las Acciones de Carpeta, que se discuten en detalle en esta entrada del blog titulada: Configurar las acciones de las carpetas de OS X para saber cuándo se añade un archivo también.

Otra alternativa es utilizar una herramienta CLI que está disponible en Homebrew a través del brew install fswatch comando. fswatch es una implementación multiplataforma que funciona en la mayoría de los sabores de *NIX, incluido MacOS.

El monitor FSEvents, disponible sólo en OS X, no tiene limitaciones conocidas limitaciones, y se adapta muy bien al número de archivos que se observados.

Ejemplo

Aquí he creado un subdirectorio llamado ~/somedir . A continuación, invoqué `fswatch contra este directorio:

$ mkdir ~/somedir
$ fswatch /some/dir

Ahora si empezamos a añadir archivos y subdirectorios fswatch lo notificará:

$ touch ~/somedir/afile
fwatch msg>> /Users/joeuser/somedir/afile

$ mkdir ~/somedir/anotherdir
fswatch msg>> /Users/joeuser/somedir/anotherdir

$ touch ~/somedir/anotherdir/afile
fswatch msg>> /Users/joeuser/somedir/anotherdir/afile

Lo anterior puede ser adaptado para su uso en un shell script que puede tomar cualquier otra acción que usted requiera cuando se detecta cualquier cambio contra el árbol de directorios que fswatch es la supervisión.

Otros ejemplos

Para actuar sobre la actividad del sistema de archivos puede utilizar uno de estos 2 patrones:

$ fswatch -0 path | while read -d "" event \
  do \
    // do something with ${event}
  done

O esto:

$ fswatch -o path | xargs -n1 -I{} program

Referencias

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X