Abrufen einzelner Dateinamen in Automator

Die Idee hinter einem kleinen Projekt, an dem ich arbeite, ist die Möglichkeit, eine Musikdatei hochzuladen und sie von After Effects aufnehmen und innerhalb einer Videodateivorlage, die ich habe, rendern zu lassen.

Der Arbeitsablauf wäre:

Sobald ich eine neue Musikdatei in einen Ordner in meinem iCloud Drive hochgeladen habe, würde dies von meinem iMac überwacht werden. Jede neue Musikdatei löst ein Adobe-Skript aus, das die neue Spur in ein Adobe After Effects-Projekt importiert, das sie nach AME exportiert und dann beendet. Die Musik wird dann in ein anderes Verzeichnis verschoben.

Ich bin auf ein Problem mit der Übergabe eines Dateinamens an ein Adobe-Skript gestoßen. Um dies zu umgehen, habe ich eine Adobe-Skriptvorlage mit einem Platzhalter-Dateinamen erstellt (der Dateipfad wäre immer derselbe), der dupliziert werden kann Platzhalter-Dateiname ersetzt (über ein Batch-Skript, obwohl es einen einfacheren Weg geben könnte, würde ich vermuten), ausgeführt und dann gelöscht.

Als ersten Durchgang habe ich versucht, mich darauf zu konzentrieren, den Namen neuer Dateien in den Ordner zu bekommen, jetzt mit gemischtem Erfolg. Wenn ich eine an den Ordner angehängte AppleScript- Skriptdatei (.scpt) ausführe, kann ich den Dateinamen anzeigen und an eine Batchdatei übergeben. Das Problem ist nun, dass es mit dem Automator-Äquivalent nicht zu funktionieren scheint.

Code unten:

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

Der ReplaceName-Batch ist ein einzelner Befehl:

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

Bisher sieht mein Automator-Workflow so aus:

Geben Sie hier die Bildbeschreibung ein

Jede Hilfe wird sehr geschätzt!

Antworten (2)

Hinweis: Diese Antwort wurde auf der Grundlage der ursprünglichen Veröffentlichung der Frage und insbesondere der ersten drei Absätze dieser Antwort ohne diesen Hinweis verfasst. Seitdem wurde das OP aktualisiert, um auf das einzugehen, was in den ersten drei Absätzen ausgedrückt wurde, und sie scheinen jetzt aus dem Zusammenhang gerissen zu sein. Wenn man sich jedoch den Bearbeitungsverlauf des OP ansieht, kann man die Relevanz im Kontext der ursprünglichen Frage erkennen. Sie bleiben vorerst bestehen, bis ich die Zeit habe, eine entsprechende Bearbeitung vorzunehmen.


Entschuldigung, aber Ihre Frage ist nicht so gut definiert und es ist nicht ganz klar, welche Aktionen Sie dem Automator Folder Action- Workflow hinzugefügt haben , abgesehen von der offensichtlichen Run AppleScript- Aktion . Es ist auch nicht klar, ob vor oder nach der Aktion „AppleScript ausführen“ Aktionen hinzugefügt wurden . Außerdem ist nicht klar, welcher Code enthalten ist oder was er alles tut. Was mich zu der Annahme veranlasst, dass es möglicherweise nicht ausreicht, nur die Datei an zu übergeben. Obwohl Sie den Code in nicht gesehen haben , wissen an dieser Stelle nur Sie Bescheid. /Users/jeffolaa/pointer.shnamepointer.shpointer.sh

Außerdem ist die Form des AppleScript- Codes , die Sie im OP gezeigt haben, nicht die richtige Form für einen Automator Folder Action- Workflow mit einer Run AppleScript- Aktion . Der on adding folder items Handler ist von dem Typ , der in einer AppleScript- Skriptdatei (.scpt) verwendet wird, die dem Zielordner manuell zugewiesen wird, indem der Befehl Folder Action Setup... aus dem Kontextmenü Services in Finder verwendet wird , nicht Automator , wo Sie die verwenden müssen Handler on input in der Aktion AppleScript ausführen .

Sie haben auch keinen Fehlerbehandlungscode , der bei Ordneraktionen wichtig ist, und die Art und Menge kann davon abhängen, was Sie in der codiert haben pointer.sh. Mit anderen Worten, Sie möchten möglicherweise die dem Ordner hinzugefügten Elemente nach Typ filtern und sicherstellen, dass es sich um eine Datei handelt, nicht um einen Ordner, oder um einen bestimmten Dateityp mit einer bestimmten Erweiterung usw. Dies kann in Automator erfolgen, bevor es dazu kommt der Aktion „AppleScript ausführen“ oder im Code der Aktion „AppleScript ausführen“ oder im Code in oder einer Kombination aus einigen oder allen. pointer.sh


Vor diesem Hintergrund ist der folgende Beispiel- AppleScript- Code eine minimale Codierung dessen, was sinnvoll ist, um den in Anführungszeichen angegebenen vollständig qualifizierten Pfadnamen der Datei(en) übergeben zu können, die dem Zielordner hinzugefügt wurden , den Sie in Automators Ordneraktion festgelegt haben, zu dem Dateien und Ordner hinzugefügt werden [ Ordner ] , der übergeben werden soll pointer.sh, da dies typisch für ein Argument ist , das an einen Shell - Befehl übergeben wird .

Minimaler AppleScript- Beispielcode zur Verwendung in einer Aktion „AppleScript ausführen“ in einem Automator-Ordneraktions- Workflow :

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

Minimaler Beispiel- AppleScript- Code zur Verwendung in einer AppleScript- Skriptdatei (.scpt), die manuell dem Zielordner zugewiesen wurde , indem der Befehl „Folder Action Setup...“ aus dem Kontextmenü „Services“ im Finder verwendet wird :

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
  • Hinweis: Um eine AppleScript- Skriptdatei (.scpt) mit dem Befehl „Folder Action Setup...“ aus dem Kontextmenü „Services“ im Finder zu verwenden , muss sie zuerst dem Ordner in Ihrem Home- Ordner hinzugefügt werden. ~/Library/Scripts/Folder Action Scripts

Um den obigen Code/Users/jeffolaa/pointer.sh zu testen, habe ich die Datei mit dem folgenden Code darin erstellt :

#!/bin/bash

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

Dadurch werden die Dateien einfach zurück in den Ordner verschoben, aus dem sie in den Zielordner gezogen wurden, dem die Ordneraktion zugewiesen ist, bei dem es sich um einen Ordner innerhalb des Testordners handelt . Dies ließ mich wissen, dass es wie codiert ordnungsgemäß funktionierte.



Wenn es sich nun nur um die nameder Datei handelt, an die Sie übergeben möchten pointer.sh, können Sie Folgendes verwenden:

Minimaler AppleScript- Beispielcode zur Verwendung in einer Aktion „AppleScript ausführen“ in einem Automator-Ordneraktions- Workflow :

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

Minimaler Beispiel- AppleScript- Code zur Verwendung in einer AppleScript- Skriptdatei (.scpt), die manuell dem Zielordner zugewiesen wurde , indem der Befehl „Folder Action Setup...“ aus dem Kontextmenü „Services“ im Finder verwendet wird :

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
  • Hinweis: Um eine AppleScript- Skriptdatei (.scpt) mit dem Befehl „Folder Action Setup...“ aus dem Kontextmenü „Services“ im Finder zu verwenden , muss sie zuerst dem Ordner in Ihrem Home- Ordner hinzugefügt werden. ~/Library/Scripts/Folder Action Scripts

Um den obigen Code zu testen , habe ich die pointer.shDatei mit dem folgenden Code bearbeitet:

#!/bin/bash

say "$1"

Was einfach sagt, dass die nameDatei in enthalten ist thisItemsFileName, was mich wissen ließ, dass sie wie kodiert richtig funktionierte.



Hinweis: Der obige Beispiel -AppleScript- Code ist genau das, und ohne ihn in eine try Anweisung zu packen , enthält er keine andere Fehlerbehandlung , die angemessen/erforderlich/gewünscht sein könnte. Es liegt in der Verantwortung des Benutzers, eine geeignete Fehlerbehandlung für jedes Beispiel hinzuzufügen präsentierter Code und oder selbst geschriebener Code .

Wenn Sie Ihre Frage jedoch aktualisieren würden, um die fehlenden Teile wie in den ersten Absätzen meiner Antwort erwähnt auszufüllen, bearbeite ich diese Codebeispiele gerne , um zu zeigen, welche angemessene Fehlerbehandlung hinzugefügt werden sollte. Es macht einfach keinen Sinn, es hinzuzufügen, bis ich die Einzelheiten kenne.

Wow, erstmal vielen Dank für diese unglaublich ausführliche Antwort! Es war bereits erstaunlich hilfreich und hat mir wirklich geholfen, mich mit Automator v AppleScript vertraut zu machen. Ich habe den ursprünglichen Beitrag aktualisiert, um hoffentlich einen besseren Einblick in das zu geben, was ich zu erreichen versuche und wo ich vorhabe. Ich hatte mit Ihren Beispielen unterschiedlichen Erfolg. Ich konnte ein AppleScript-Skript erstellen und es an den Ordner anhängen und eine Nachricht erstellen, die mir den Dateinamen gibt, was großartig ist! Obwohl ich es anscheinend nicht dazu bringen kann, in Automator zu arbeiten oder es an Batch weiterzugeben. Nochmals vielen Dank @user3439894

Dank einiger erstaunlicher Vorschläge von @ user34393894 konnte ich meinen Blocker lösen.

Anstatt Automator zu verwenden, konnte ich das benötigte Ergebnis über ein AppleScript-Skript erhalten, das als Ordneraktion angehängt war.

Für alle, die daran interessiert sind, verwende ich jetzt den Code, der großartige Ergebnisse erzielt:

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

Wenn jemand Feedback hat oder auf dem Code aufbaut, wäre das sehr zu schätzen, immer auf der Suche nach Verbesserung!

Es besteht wirklich keine Notwendigkeit, System Eventsum Artikelinformationen zu erhalten , da info forein AppleScript eingebaut ist und das bereits getan wurde und in thisItemsInfofor enthalten ist thisItem. Das heißt, die Zeile set thisItemsInfo to info for thisItementhält bereits die info , greifen Sie einfach wie in der nächsten Zeile darauf zu, aber entsprechend dem Wert der Eigenschaft , die Sie abrufen möchten, z.set theKind to kind in thisItemsInfo