¿Quieres ayuda para crear un applecript que se ejecuta cuando el contenido de una carpeta cambia?

2

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:

  1. ¿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?
  2. ¿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:

  1. Crea dos carpetas en la Mac. Uno es para archivos RTF, el otro es para archivos MMD.
  2. Configura la aplicación Mac para sincronizar sus datos y entrar desde la carpeta RTF
  3. 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.
  4. 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í?

    
pregunta inspirednz 17.05.2015 - 06:33

2 respuestas

3

Me gustaría crear una secuencia de comandos que supervisa ambas carpetas. Mi idioma de elección para esto es Python. AppleScript no es muy adecuado para este tipo de operación. La idea básica es escuchar FSEvents en las dos carpetas en cuestión y, cuando se produce una, anula rápidamente la secuencia de eventos para la otra carpeta, realiza algunas operaciones de conversión y sincronización, y luego vuelve a programar la secuencia de eventos no programada previamente.

El script completo, descargado aquí, con versiones modificadas de los scripts que me mostraste. La instalación de MacFSEvents ahora es automática: enlace

Aquí están los pasos para usarlo:

Extraiga el applet, haga clic con el botón derecho en él y seleccione "Mostrar contenido del paquete", abra Contenidos y Recursos, luego edite la lista interna con los emparejamientos de carpetas RTF y MMD. Podrá especificar tantos pares como necesite para mantenerse sincronizados entre sí, solo mantenga el mismo formato que usé en el plist: una matriz por par, cada uno con dos elementos, el primer elemento es la ruta a la carpeta RTF, la segunda es la ruta a la carpeta MMD. Verás esto cuando abras el plist.

Esto debería funcionar sin problemas. Ahora se observarán las carpetas para cualquier tipo de modificación, y los archivos se convertirán y transferirán a la otra carpeta.

    
respondido por el William T Froggard 17.05.2015 - 09:44
1

Estoy a favor de que la gente aprenda a escribir guiones, pero para el uso y la flexibilidad diarios, reimplementar partes de Hazel by NoodleSoft es menos potente y eficiente para una solución de propósito general.

Nuevamente,felicitacionesa Froggard y Inspired Life por la excelente respuesta y la pregunta práctica.

    
respondido por el bmike 20.05.2015 - 17:21

Lea otras preguntas en las etiquetas