Obtener nombres de archivos individuales en Automator

La idea detrás de un pequeño proyecto en el que estoy trabajando es poder cargar un archivo de música y que After Effects lo recoja y lo reproduzca dentro de una plantilla de archivo de video que tengo.

El flujo de trabajo sería:

Una vez que subo un nuevo archivo de música a una carpeta en mi iCloud Drive, que sería monitoreado por mi iMac. Cada nuevo archivo de música activa una secuencia de comandos de Adobe que importa la nueva pista a un proyecto de Adobe After Effects que la exporta a AME y luego se cierra. La música luego se mueve a otro directorio.

Me encontré con un problema al pasar un nombre de archivo a una secuencia de comandos de Adobe, por lo que, para solucionarlo, he creado una plantilla de secuencia de comandos de Adobe con un nombre de archivo de marcador de posición (la ruta del archivo siempre sería la misma) que se puede duplicar, tener el nombre de archivo de marcador de posición reemplazado (a través de un script por lotes, aunque sospecho que podría haber una forma más simple de hacerlo), ejecutado y luego eliminado.

Como primer paso, he estado tratando de concentrarme en obtener el nombre de los nuevos archivos en la carpeta, ahora con un éxito mixto. Cuando ejecuto un archivo de secuencia de comandos AppleScript (.scpt) adjunto a la carpeta, puedo mostrar el nombre del archivo y pasarlo a un archivo por lotes. El problema ahora es que no parece funcionar con el equivalente de Automator.

Código a continuación:

on adding folder items to thisFolder after receiving theseItems
repeat with i from 1 to count theseItems
    try
        set thisItem to item i in theseItems
        set thisItemsInfo to info for thisItem
        set thisItemsFileName to quoted form of name in thisItemsInfo
        display dialog thisItemsFileName buttons {"Continue"}
        do shell script "/Users/jeffolaa/ReplaceName.sh " & thisItemsFileName
    end try
end repeat
end adding folder items to

El lote de ReplaceName es un solo comando:

#!/bin/bash
sed -i.bu 's/EDITTHIS/'$1'/' /Users/jeffolaa/Library/Mobile\ Documents/com\~apple\~CloudDocs/Documents/Adobe\ Scripts/AddMusicExport.jsx 

Hasta ahora, mi flujo de trabajo de Automator se ve así:

ingrese la descripción de la imagen aquí

¡Toda ayuda es muy apreciada!

Respuestas (2)

Nota: Esta respuesta se escribió en base a la publicación original de la pregunta y, en particular, los primeros tres párrafos de esta respuesta, sin esta nota. Desde entonces, el OP se actualizó para abordar lo expresado en los primeros tres párrafos y ahora pueden parecer fuera de contexto. Sin embargo, al observar el historial de edición del OP, se puede ver la relevancia en el contexto de la pregunta original. Se mantendrán por ahora hasta que tenga tiempo para hacer una edición adecuada.


Lo sentimos, pero su pregunta no está tan bien definida y no está totalmente claro qué acciones agregó al flujo de trabajo de Acción de carpeta de Automator , sin la obvia acción Ejecutar AppleScript . Tampoco está claro si hay acciones añadidas antes o después de la acción Ejecutar AppleScript . Además, no está claro en qué código se encuentra o todo lo que está haciendo. Lo que me lleva a creer que simplemente pasar el del archivo a puede no ser suficiente. Aunque sin ver el código en , a estas alturas solo tú lo sabes. /Users/jeffolaa/pointer.shnamepointer.shpointer.sh

Además, la forma del código AppleScript que ha mostrado en el OP no es la forma adecuada para un flujo de trabajo de Acción de carpeta de Automator que utiliza una acción Ejecutar AppleScript . El controlador es del tipo que se usa en un archivo de secuencia de comandos AppleScript (.scpt) que se asigna manualmente a la carpeta de destino mediante el comando Configuración de acción de carpeta... del menú contextual Servicios en Finder , no en Automator , donde debe usar el manipulador on adding folder items on input en la acción Ejecutar AppleScript .

Tampoco tiene un código de manejo de errores , lo cual es importante en las acciones de carpeta y el tipo y la cantidad pueden depender de lo que haya codificado en el archivo pointer.sh. En otras palabras, es posible que desee filtrar los elementos agregados a la carpeta por tipo, asegurándose de que sea un archivo y no una carpeta, o un tipo particular de archivo con una extensión determinada, etc. Esto se puede hacer en Automator antes de que llegue a la acción Ejecutar AppleScript , o en el código de la acción Ejecutar AppleScript , o en el código en , o una combinación de cualquiera o todas ellas. pointer.sh


Dicho esto, el siguiente código AppleScript de ejemplo es una codificación mínima de lo que tiene sentido para poder pasar el nombre de ruta completo citado de los archivos agregados a la carpeta de destino que configuró en la acción de carpeta de Automator recibe archivos y carpetas agregados a [ carpeta ] para pasar a , ya que eso es típico de un argumento pasado a un comando de shell . pointer.sh

Ejemplo mínimo de código AppleScript para usar en una acción Ejecutar AppleScript en un flujo de trabajo de Acción de carpeta de Automator :

on run {input, parameters}
    repeat with i from 1 to count input
        try
            set thisItem to item i in input
            set thisItemsPathname to quoted form of POSIX path of thisItem
            do shell script "/Users/jeffolaa/pointer.sh " & thisItemsPathname
        end try
    end repeat
end run

Código AppleScript de ejemplo mínimo para usar en un archivo de secuencia de comandos AppleScript (.scpt) asignado manualmente a la carpeta de destino mediante el comando Configuración de acción de carpeta... del menú contextual Servicios en Finder :

on adding folder items to thisFolder after receiving theseItems
    repeat with i from 1 to count theseItems
        try
            set thisItem to item i in theseItems
            set thisItemsPathname to quoted form of POSIX path of thisItem
            do shell script "/Users/jeffolaa/pointer.sh " & thisItemsPathname
        end try
    end repeat
end adding folder items to
  • Nota: Para usar un archivo de secuencia de comandos AppleScript (.scpt) con el comando Configuración de acción de carpeta... del menú contextual Servicios en Finder , primero debe agregarse a la carpeta que se encuentra dentro de su carpeta Inicio . ~/Library/Scripts/Folder Action Scripts

Para probar el código anterior , creé el /Users/jeffolaa/pointer.sharchivo con el siguiente código :

#!/bin/bash

mv "$1" "$HOME/Test/"

Lo que simplemente mueve los archivos de vuelta a la carpeta desde la que fueron arrastrados a la carpeta de destino a la que está asignada la Acción de carpeta , que es una carpeta dentro de la carpeta Prueba . Esto me hizo saber que estaba funcionando correctamente según lo codificado.



Ahora, si es solo el namedel archivo al que desea pasar pointer.sh, puede usar lo siguiente:

Ejemplo mínimo de código AppleScript para usar en una acción Ejecutar AppleScript en un flujo de trabajo de Acción de carpeta de Automator :

on run {input, parameters}
    repeat with i from 1 to count input
        try
            set thisItem to item i in input
            set thisItemsInfo to info for thisItem
            set thisItemsFileName to quoted form of name in thisItemsInfo
            do shell script "/Users/jeffolaa/pointer.sh " & thisItemsFileName
        end try
    end repeat
end run

Código AppleScript de ejemplo mínimo para usar en un archivo de secuencia de comandos AppleScript (.scpt) asignado manualmente a la carpeta de destino mediante el comando Configuración de acción de carpeta... del menú contextual Servicios en Finder :

on adding folder items to thisFolder after receiving theseItems
    repeat with i from 1 to count theseItems
        try
            set thisItem to item i in theseItems
            set thisItemsInfo to info for thisItem
            set thisItemsFileName to quoted form of name in thisItemsInfo
            do shell script "/Users/jeffolaa/pointer.sh " & thisItemsFileName
        end try
    end repeat
end adding folder items to
  • Nota: Para usar un archivo de secuencia de comandos AppleScript (.scpt) con el comando Configuración de acción de carpeta... del menú contextual Servicios en Finder , primero debe agregarse a la carpeta que se encuentra dentro de su carpeta Inicio . ~/Library/Scripts/Folder Action Scripts

Para probar el código anterior , edité el pointer.sharchivo con el siguiente código:

#!/bin/bash

say "$1"

Lo que simplemente dice el namearchivo guardado en thisItemsFileName, lo que me permite saber que estaba funcionando correctamente según lo codificado.



Nota: El ejemplo de código AppleScript anterior es solo eso, y sin envolverlo en una declaración , no incluye ningún otro manejo de errores que pueda ser apropiado/necesario/deseable, el usuario tiene la responsabilidad de agregar cualquier manejo de errores apropiado para cualquier ejemplo . código presentado y/o código escrito por uno mismo.try

Dicho esto, si actualiza su pregunta para completar las piezas faltantes como se menciona en los párrafos iniciales de mi respuesta, estaré encantado de editar estos ejemplos de código para reflejar qué manejo de errores apropiado se debe agregar. Simplemente no tiene sentido agregarlo hasta que sepa los detalles.

¡Guau, en primer lugar, muchas gracias por esta respuesta increíblemente detallada! Ya ha sido increíblemente útil y realmente me ayudó a entender Automator v AppleScript. He actualizado la publicación original para, con suerte, dar más información sobre lo que estoy tratando de lograr y dónde estoy. He tenido diversos grados de éxito usando sus ejemplos. Pude crear un script AppleScript y adjuntarlo a la carpeta y crear un mensaje que me da el nombre del archivo, ¡lo cual es genial! Aunque parece que no puedo hacer que funcione en Automator o pasarlo al lote. Gracias de nuevo @user3439894

Logré resolver mi bloqueador gracias a algunas sugerencias increíbles de @ user34393894.

En lugar de usar Automator, pude obtener el resultado que necesitaba a través de un script de AppleScript adjunto como una acción de carpeta.

Para cualquier persona interesada, el código que estoy usando ahora y que está obteniendo excelentes resultados es:

on adding folder items to thisFolder after receiving theseItems
repeat with i from 1 to count theseItems
    try
        set thisItem to item i in theseItems
        set thisItemsInfo to info for thisItem
        set thisItemsFileName to quoted form of name in thisItemsInfo

        tell application "System Events" -- get item info
            set theKind to kind of thisItem
            set theExtension to name extension of thisItem
        end tell

        if theKind is "Folder" then
            -- do folder stuff
        else if theExtension is "mp3" then

            do shell script "/Users/jeffolaa/ReplaceName.sh " & thisItemsFileName

        end if          
    end try
end repeat
end adding folder items to

Si alguien tiene algún comentario o se basa en el código, sería muy apreciado, ¡siempre buscando mejorar!

Realmente no hay necesidad de usar System Eventspara obtener información del elemento , ya que info forhay un AppleScript incorporado y eso ya se hizo y está contenido en thisItemsInfofor thisItem. Es decir, la línea set thisItemsInfo to info for thisItemya contiene la información , simplemente acceda a ella como se hace en la siguiente línea, pero según corresponda para el valor de la propiedad que desea recuperar, por ejemplo:set theKind to kind in thisItemsInfo