Para un caso de uso específico, he desarrollado un flujo de trabajo de acción de carpeta con Automator. Cuando se crea un archivo en una carpeta 'abc', el flujo de trabajo se inicia y ejecuta un script de shell.
Este flujo de trabajo debe instalarse/implementarse en muchas máquinas cliente en entornos corporativos. Si bien los usuarios finales pueden recibir las instrucciones de configuración, este enfoque es propenso a errores, por lo que estoy buscando un mejor enfoque.
Soy consciente de que la definición de flujo de trabajo real se almacena en:
/Users/[user]/Library/Workflows/Applications/Folder Actions/*
Si bien *.workflow/Contents/document.wflow incluye folderActionFolderPath, copiar el flujo de trabajo de un cliente a otro no funciona porque la acción de carpeta no está habilitada. Todavía debe habilitarse en Finder (carpeta de inicio --> clic derecho en la carpeta --> seleccionar 'Configuración de acción de carpeta...' en el menú desplegable). No he encontrado una forma de automatizar este paso de configuración desde la línea de comandos.
¿Cómo puede un administrador del sistema instalar un flujo de trabajo de Acción de carpeta en varias máquinas cliente?
Si realmente desea que el proceso sea "a prueba de idiotas", esta es la opción. En Script Editor.app, cree un nuevo documento en blanco e inmediatamente vaya y guárdelo como una aplicación (yo guardé el mío como "JIMZ Attach Folder Action.app")
El propósito de esta aplicación sería copiar el archivo de flujo de trabajo de Automator (que se incluirá dentro de la carpeta "Recursos" de esta nueva aplicación que acaba de crear en el Editor de secuencias de comandos) que desea adjuntar a la carpeta "ABC" en la computadora de cualquier usuario, a la carpeta "Acciones de carpeta" necesaria en esa computadora. Si la carpeta "ABC" no existe en la computadora de destino, se creará. Para los fines de este proyecto, la ubicación de la carpeta "ABC" estaría en el escritorio de la computadora de destino.
Pegue el siguiente código en su nueva aplicación AppleScript en blanco que acaba de crear.
property nameOfTriggerFolder : "ABC"
property pathToFolderActions : ((path to workflows folder as text) & "Applications:Folder Actions:")
property attachFolderActionTo : (path to desktop as text) & nameOfTriggerFolder
set resourceName to "ABC Folder Action.scpt"
set folderActionScript to ((path to me as string) & "Contents:Resources:" & resourceName) as string
tell application "Finder"
if not (exists of folder attachFolderActionTo) then
make new folder at (path to desktop) with properties {name:nameOfTriggerFolder}
end if
duplicate file folderActionScript to folder pathToFolderActions with replacing
end tell
tell application "Folder Actions Setup"
activate
try
set addedFolderAction to make new folder action with properties {name:nameOfTriggerFolder, path:attachFolderActionTo}
end try
try
delay 0.5
tell addedFolderAction to make new script with properties {name:resourceName, path:(pathToFolderActions & resourceName)}
end try
if not folder actions enabled then
set folder actions enabled to true
end if
end tell
Luego continúe y arrastre su archivo de flujo de trabajo de Automator desde la aplicación Finder directamente a la carpeta de recursos en el Editor de secuencias de comandos (como se muestra en la animación a continuación)
Compile y guarde la aplicación en el Editor de secuencias de comandos. Ahora puedes distribuir esta app a quien quieras. Cuando esta aplicación ahora se inicie en cualquier computadora de destino, copiará el archivo de flujo de trabajo de Automator directamente a la carpeta donde debe ubicarse. También agregará la carpeta "ABC" a la lista de carpetas habilitadas en Folder Actions Setup.app y adjuntará el script o el archivo de flujo de trabajo a esa carpeta.
De manera similar a la sugerencia de @ wch1zpink, consideraría formular la acción de carpeta como un script en lugar de un flujo de trabajo de Automator , que se vería así:
on adding folder items to directory after receiving fs
do shell script "..."
end adding folder items to
Guardando esto como un archivo .scpt
o .applescript
y moviéndolo a ~/Library/Scripts/Folder Action Scripts
, puede escribir la creación de acciones de carpeta y adjuntarlas a carpetas como esta:
use sys : application "System Events"
property name : "abc"
property path : "/path/to/abc"
property folder action : a reference to folder action named (my name)
property script : "my folder action script.applescript"
property folder : a reference to Folder Action scripts folder
property file : a reference to the file named (my script) in my folder
set folder actions enabled to true
if not (my file exists) then return open my folder
if my folder action exists then return my folder action's scripts
make new folder action with properties {name:my name, path:my path}
tell my folder action to make new script with properties ¬
{name:my file's name, POSIX path:my file's POSIX path}
set my folder action's enabled to true
set my folder action's scripts's enabled to true
¿ Dónde "my folder action script.applescript"
está el nombre de la secuencia de comandos de acción de la carpeta guardada? y las propiedades name
y path
representan el nombre y la ruta a su carpeta monitoreada.
mateo ribeiro