¿Hay una manera simple de ejecutar automáticamente un comando (Terminal) cada vez que se cambia un archivo en una carpeta específica?
Esto debería ser posible a través de la línea de comandos, o una aplicación integrada en el sistema, sin aplicaciones de terceros.
¿Algunas ideas?
macos
terminal
command-line
Louis B.
fuente
fuente
Respuestas:
Guarde una lista de propiedades como esta como
~/Library/LaunchAgents/test.plist
:El agente se puede cargar
launchctl load ~/Library/LaunchAgents/test.plist
o cerrar sesión y volver a iniciarla. La aplicación de cambios requiere descargar y cargar la lista.Tilde expansion (
~/
) funciona en WatchPaths por defecto. EnableGlobbing agrega comodines y expansión de tilde para ProgramArguments, pero no afecta a Program o WatchPaths.Si un archivo observado se modifica dentro de los diez segundos desde la última invocación, se agrega un mensaje como este a system.log:
Una forma de deshacerse de los mensajes es agregar algo parecido
sleep 10
al final de los scripts. Establecer ThrottleInterval en 10 no ayuda.No se detectan cambios en las subcarpetas de las carpetas observadas.
Ver
man launchd
yman launchd.plist
para más información.fuente
entr (1) es una utilidad para ejecutar comandos cuando cambian los archivos. Lee una lista de archivos en STDIN y usa kqueue (2) para evitar sondeos.
Ejemplo:
fuente
Puede usar Acciones de carpeta, que le permite ejecutar scripts (Automator) siempre que el contenido de una carpeta cambie. Hasta donde yo sé, Automator tiene una plantilla que le permite crear fácilmente una nueva acción de carpeta y adjuntarla a la carpeta deseada. Y al agregar una acción "Ejecutar script de Shell", debería obtener el efecto deseado.
fuente
Las acciones de carpeta están bien para activarse cuando se agrega o modifica un archivo.
Sin embargo, si su definición de cambio incluye la eliminación de un archivo, las acciones de la Carpeta OSX no detectan si un archivo ha sido eliminado.
Para responder la pregunta:
Descargue las dependencias de FileWatcher desde aquí: https://github.com/eonist/swift-utils
Familiarícese con la ejecución rápida en la línea de comando: http://krakendev.io/blog/scripting-in-swift
Use este código para mirar una carpeta.
Código:
fuente
Automator tiene un tipo de flujo de trabajo llamado "Acción de carpeta" que se ejecuta automáticamente cuando se agrega algo a una carpeta. Cree uno, luego use la acción "Ejecutar Shell Script".
fuente
Es posible que desee probar algo como esto:
fuente
ls -l
detectar los cambios en el archivo.