watches watchers react reached number for error macos watch inotify

macos - error - system limit for number of file watchers reached watch react native



¿Hay un comando como "ver" o "inotifywait" en la Mac? (12)

fswatch

fswatch es un pequeño programa que utiliza la API de FSEvents de Mac OS X para supervisar un directorio. Cuando se recibe un evento sobre cualquier cambio en ese directorio, el comando de shell especificado se ejecuta mediante /bin/bash

Si está en GNU / Linux, inotifywatch (parte del paquete inotify-tools en la mayoría de las distribuciones) proporciona una funcionalidad similar.

Actualización: fswatch ahora se puede usar en muchas plataformas, incluyendo BSD, Debian y Windows.

Sintaxis / Un Ejemplo Simple

La nueva forma de ver múltiples rutas, para las versiones 1.xy superiores :

fswatch -o ~/path/to/watch | xargs -n1 ~/script/to/run/when/files/change.sh

La forma más antigua para las versiones 0.x :

fswatch ~/path/to/watch ~/script/to/run/when/files/change.sh

Instalación con Homebrew

A partir del 9/12/13 se agregó de nuevo a homebrew - ¡yay! Entonces, actualice su lista de fórmulas ( brew update ) y luego todo lo que necesita hacer es:

brew install fswatch

Instalación sin Homebrew

Escribe estos comandos en Terminal.app

cd /tmp git clone https://github.com/alandipert/fswatch cd fswatch/ make cp fswatch /usr/local/bin/fswatch

Si no tiene un compilador de c en su sistema, es posible que necesite instalar Xcode o herramientas de línea de comandos de Xcode, ambas gratuitas. Sin embargo, si ese es el caso, probablemente deberías echarle un homebrew .

Opciones adicionales para fswatch version 1.x

Usage: fswatch [OPTION] ... path ... Options: -0, --print0 Use the ASCII NUL character (0) as line separator. -1, --one-event Exit fsw after the first set of events is received. -e, --exclude=REGEX Exclude paths matching REGEX. -E, --extended Use exended regular expressions. -f, --format-time Print the event time using the specified format. -h, --help Show this message. -i, --insensitive Use case insensitive regular expressions. -k, --kqueue Use the kqueue monitor. -l, --latency=DOUBLE Set the latency. -L, --follow-links Follow symbolic links. -n, --numeric Print a numeric event mask. -o, --one-per-batch Print a single message with the number of change events. in the current batch. -p, --poll Use the poll monitor. -r, --recursive Recurse subdirectories. -t, --timestamp Print the event timestamp. -u, --utc-time Print the event time as UTC time. -v, --verbose Print verbose output. -x, --event-flags Print the event flags. See the man page for more information.

Quiero ver una carpeta en mi Mac (Snow Leopard) y luego ejecutar un script (dándole el nombre de archivo de lo que se acaba de mover a una carpeta (como parámetro ... x.sh "nombre de archivo")).

Tengo un script escrito en bash (x.sh) que moverá algunos archivos y otras cosas en la entrada $ 1. Solo necesito OSX para darme el nombre del archivo cuando los nuevos archivos / carpetas se mueven / crean en un directorio.

¿Tal orden?


Aquí hay una alternativa simple de una sola línea para los usuarios que no tienen el comando de watch que desean ejecutar un comando cada 3 segundos:

while :; do your-command; sleep 3; done

Es un bucle infinito que es básicamente lo mismo que hacer lo siguiente:

watch -n3 your-command


Aquí hay una línea usando la tool .

$ while true; do kqwait doc/my_file.md; make; done


El watchman de Facebook, disponible a través de Homebrew, también se ve bien. Soporta también el filtrado:

Estas dos líneas establecen una vigilancia en un directorio de origen y luego configuran un desencadenante llamado "buildme" que ejecutará una herramienta llamada "minify-css" cada vez que se cambie un archivo CSS. La herramienta pasará una lista de los nombres de archivos modificados.

$ watchman watch ~/src

$ watchman -- trigger ~/src buildme ''*.css'' -- minify-css

Observe que el camino debe ser absoluto.


Es posible que desee echar un vistazo a (y tal vez expandir) mi pequeña herramienta kqwait . Actualmente, solo se sienta y espera un evento de escritura en un solo archivo, pero la arquitectura kqueue permite el apilamiento jerárquico de eventos ...


Esto es solo para mencionar entr como una alternativa en OSX para ejecutar comandos arbitrarios cuando los archivos cambian. Lo encuentro simple y útil.


Las acciones de la carpeta Apple OSX le permiten automatizar tareas basadas en acciones tomadas en una carpeta.


Mi bifurcación de fswatch proporciona la funcionalidad de inotifywait -m con un poco menos (¡no espere, más! Tengo muchos más problemas en Linux con inotifywait ...) salida fácil de analizar.

Es una mejora en el fswatch original porque envía la ruta real del archivo modificado a través de STDOUT en lugar de requerir que proporcione un programa que bifurca.

Ha sido una roca sólida como la base de una serie de scripts de bash de miedo que uso para automatizar cosas.

(esto no es un tema) inotifywait en Linux, por otro lado, requiere una gran cantidad de kludges y aún no he encontrado una buena manera de administrarlo, aunque creo que algo basado en node.js podría se el boleto


Puedes usar launchd para ese propósito. Launchd se puede configurar para iniciar automáticamente un programa cuando se modifica una ruta de archivo.

Por ejemplo, la siguiente lista de configuración de launchd iniciará el programa /usr/bin/logger cuando se modifique la carpeta de escritorio de mi cuenta de usuario:

<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE plist PUBLIC "-//Apple Computer//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd"> <plist version="1.0"> <dict> <key>Label</key> <string>logger</string> <key>ProgramArguments</key> <array> <string>/usr/bin/logger</string> <string>path modified</string> </array> <key>WatchPaths</key> <array> <string>/Users/sakra/Desktop/</string> </array> </dict> </plist>

Para activar la lista de configuración, guárdelo en la carpeta LaunchAgents en su carpeta de la Biblioteca como "logger.plist".

Desde el shell, puede utilizar el comando launchctl para activar el logger.plist ejecutando:

$ launchctl load ~/Library/LaunchAgents/logger.plist

La carpeta de escritorio ahora está siendo monitoreada. Cada vez que se cambie, debería ver una salida en system.log (use Console.app). Para desactivar el logger.plist, ejecute:

$ launchctl unload ~/Library/LaunchAgents/logger.plist

El archivo de configuración anterior utiliza la opción WatchPaths . Alternativamente, también puede utilizar la opción QueueDirectories . Vea la página de manual de launchd para más información.


Tengo un GIST para esto y el uso es bastante simple

watchfiles <cmd> <paths...>

Para ilustrar, el siguiente comando repetirá Hello World cada vez que cambie el file2 O el file2 ; y la verificación de intervalo por defecto es de 1 segundo

watchfiles ''echo Hello World'' /path/to/file1 /path/to/file2

Si quiero verificar cada 5 segundos puedo usar la -t

watchfiles -t ''echo Hello World'' /path/to/file1 /path/to/file2

  • -v habilita el modo verbose que muestra información de depuración
  • -q hace que los watchfiles ejecuten de forma silenciosa (se mostrará # para que el usuario pueda ver que el programa se está ejecutando)
  • -qq hace que los watchfiles ejecuten de forma completamente silenciosa
  • -h muestra la ayuda y el uso.

https://gist.github.com/thiagoh/5d8f53bfb64985b94e5bc8b3844dba55


watchdog es una API de Python multiplataforma para ver archivos / directorios, y tiene una herramienta integrada de "trucos" que le permite desencadenar acciones (incluidos comandos de shell) cuando ocurren eventos (incluido un nuevo archivo agregado, un archivo eliminado y un archivo modificado).


Edición: fsw se ha fusionado en fswatch . En esta respuesta, cualquier referencia a fsw debería ahora leer fswatch .

Escribí un reemplazo de fswatch en C ++ llamado fsw que presenta varias mejoras:

  • Es un proyecto de GNU Build System que se basa en cualquier plataforma compatible (OS X v.> = 10.6) con

    ./configure && make && sudo make install

  • Múltiples caminos se pueden pasar como diferentes argumentos:

    fsw file-0 ... file-n

  • Vuelca un registro detallado con toda la información del evento, como:

    Sat Feb 15 00:53:45 2014 - /path/to/file:inodeMetaMod modified isFile

  • Su salida es fácil de analizar, de modo que la salida fsw puede canalizarse a otro proceso.

  • La latencia se puede personalizar con -l, --latency .
  • Los indicadores de eventos numéricos se pueden escribir en lugar de los textuales con -n, --numeric .
  • El formato de hora se puede personalizar utilizando strftime formato strftime con -t, --time-format .
  • La hora puede ser la hora local de la máquina (por defecto) o la hora UTC con -u, --utc-time .

Obteniendo fsw:

fsw está alojado en GitHub y se puede obtener clonando su repositorio:

git clone https://github.com/emcrisostomo/fsw

Instalación de fsw:

fsw se puede instalar usando los siguientes comandos:

./configure && make && sudo make install

Más información:

También escribí una entrada de blog introductoria donde puedes encontrar un par de ejemplos sobre cómo funciona fsw .