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.
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 modoverbose
que muestra información de depuración -
-q
hace que loswatchfiles
ejecuten de forma silenciosa (se mostrará#
para que el usuario pueda ver que el programa se está ejecutando) -
-qq
hace que loswatchfiles
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
formatostrftime
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
.