Apreciaría enormemente alguna ayuda con lo siguiente.
Mi escenario:
Tengo una aplicación para Mac que genera archivos RTF. Tengo una aplicación para Android que se ocupa de los archivos MultiMarkdown / Markdown.
La aplicación Mac funciona con proyectos, y estos tienen cualquier número de archivos en ellos. Puede sincronizar automáticamente los archivos en un proyecto dado a una carpeta. Esencialmente, colocará en la carpeta un montón de archivos cada vez que se sincronice (al abrir y cerrar, y manualmente). Cualquier cambio en esa carpeta se sincronizará automáticamente con mi dispositivo Android.
Sin embargo, necesito que se conviertan a archivos .mmd antes de que eso suceda, y que se vuelvan a convertir a RTF cuando los archivos se modifican (o son nuevos) desde el dispositivo Android.
Así que aquí está lo que tengo en mente. Lo que me gustaría es configurar las cosas de tal manera que cuando los archivos se sincronizan desde la aplicación Mac a su carpeta de destino, esos archivos se conviertan automáticamente de RTF a MMD. Ya tengo los scripts que harán la conversión real. Y cuando los archivos MMD cambian, se convertirán automáticamente en archivos RTF. También tengo un script para esto.
Las preguntas que tengo son estas:
- ¿Cómo puedo controlar automáticamente una carpeta para detectar cambios en su contenido y ejecutar un script si los archivos cambian en esa carpeta?
- ¿Cómo podría hacer que esto funcione de dos maneras, sin lanzar todo en un bucle sin fin? Al principio pensé que podía hacer lo siguiente:
Conversión bidireccional:
- Crea dos carpetas en la Mac. Uno es para archivos RTF, el otro es para archivos MMD.
- Configura la aplicación Mac para sincronizar sus datos y entrar desde la carpeta RTF
- Configure el sistema de sincronización de Mac a Android (Dropbox, Bittorrent Sync, etc.) para sincronizar el contenido de la carpeta MMD con una carpeta en el dispositivo Android.
- Cuando cambie el contenido de las carpetas RTF, convierta los archivos a MMD y ponga la salida en la carpeta MMD. Y viceversa.
Pero, obviamente, esto creará un bucle sin fin, porque cada acción activará la acción inversa, sin fin.
Una posible forma de evitar este bucle sin fin podría ser esta:
- La carpeta RTF tiene un script R asignado. Cuando cambia el contenido, se ejecuta el script R.
- La carpeta MMD tiene un script M asignado. Cuando cambia el contenido, se ejecuta el script M.
- Cuando se detecta un cambio en la carpeta RTF, lo primero que hace el script R es deshabilitar el script M para que no se active. Lo último que hace el script R antes de salir es habilitar nuevamente el script M. De esa manera, M no 'notará' que el contenido de la carpeta cambiaba mientras que R estaba actualizando su contenido con archivos recién convertidos.
- Lo mismo se aplicaría a la inversa.
Pero tal vez hay una mejor manera?
Estoy dispuesto a aprender más sobre las secuencias de comandos y, en el proceso, resolver este problema.
¿Hay personas con ideas viables sobre cómo lograr lo que espero resolver aquí?