创建 Automator 文件夹操作以根据文件名的一部分自动创建目录,然后移动到服务器上的新目录

Create an Automator folder action to automatically create a directory based on part of a filename, then move to a new directory on the server

我需要创建一个应用程序或文件夹操作,用户可以在其中放置文件。该文件夹将:

  1. 检查每个文件名的前 13 位数字并使用这 13 位数字创建一个新目录
  2. 将前 13 位数字相同的所有文件移动到相关文件夹
  3. 将整个文件夹移动到服务器上的预设目录

JPG 名称将是:

目前,正在使用 Photoshop Droplet 自动创建 JPG。然后,Droplet 在用户桌面上创建一个目录,其中包含该文件的所有版本。此文件夹称为 JPG。 如果我可以为 Desktop>JPGs 文件夹创建一个文件夹操作,然后自动 运行 脚本来创建新目录并移动文件,这将很有用。创建文件可能需要 2 秒到 1 分钟,具体取决于一次创建的文件数量。

我有一些部分工作的代码来创建新文件夹,但我无法使用 Automator

中的文件夹操作自动运行
on run {input, parameters}

    set chosenFolder to (choose folder)
    tell application "Finder" to set fileList to files of (chosenFolder)

    repeat with aFile in fileList
        set {name:Nm, name extension:Ex} to info for (aFile as alias)
        if Ex is missing value then set Ex to ""
        if Ex is not "" then set Nm to text 1 thru ((count Nm) - (count Ex) - 1) of Nm
        set dateFolder to text 1 thru 13 of Nm
        set sourceFile to quoted form of POSIX path of (aFile as text)
        set destinationFile to quoted form of (POSIX path of chosenFolder & dateFolder & "/" & name of aFile)
        do shell script "ditto " & sourceFile & space & destinationFile
        do shell script "rm " & sourceFile
    end repeat
end run

这将创建一个新文件夹并移动正确的文件。当文件被放入特定文件夹时,我需要它自动 运行 。然后我需要将新创建的文件夹移动到另一个目录。

您可以使用

移动文件夹
do shell script "mv " & quoted form of (POSIX path of chosenFolder & dateFolder & "/") & space & "/path/to/destinationFolder

如果两个文件分布在同一个 dateFolder 中会发生什么?上面的语法将覆盖现有文件夹。

对于文件夹操作,您实际上不需要自动化工作流程。

您可以使用文件夹操作来执行此操作,而无需使用 Automator。打开脚本编辑器应用程序并复制以下代码:

on adding folder items to this_folder after receiving these_items
    tell application "System Events"
        set chosenFolder to POSIX path of this_folder
        repeat with aFile in these_items
            set {Nm, Ex} to {name, name extension} of aFile
            try
                if Ex is not in {missing value, ""} then
                    set dateFolder to text 1 thru 13 of Nm
                    set destinationFolder to my checkForFolder(chosenFolder, dateFolder)
                    move aFile to destinationFolder
                end if
            on error
                set malformedFileNameFolder to my checkForFolder(chosenFolder, "Malformed File Names")
                move aFile to malformedFileNameFolder
            end try
        end repeat
    end tell
end adding folder items to --ing folder items to

on checkForFolder(baseFolderPath, folderName)
    tell application "System Events"
        try
            if not (exists folder folderName of folder baseFolderPath) then
                make new folder at folder baseFolderPath with properties {name:folderName}
            end if
            return folder folderName of folder baseFolderPath
        on error errstr
            display dialog errstr
        end try
    end tell
end checkForFolder

在“~/Library/Scripts/Folder Action Scripts”中用你喜欢的任何名称保存它。打开文件夹操作设置应用程序,单击左侧的“+”按钮添加 JPG 文件夹,然后单击右侧的“+”按钮将脚本附加到文件夹。那你应该完成了。

P.s。如果您需要以编程方式设置文件夹操作——例如,如果您手动设置这些而不只是克隆用户——您可以使用这样的脚本:

tell application "System Events"
    set folderPath to "/path/to/target/folder"
    set scptPath to "/Users/whomever/Library/Scripts/Folder Action Scripts/script name"

    try
        set fa to first folder action whose path is folderPath
    on error errstr
        set fa to make new folder action with properties {path:folderPath, enabled:false}
    end try

    set {fileType, fileExt, fileName} to {file type, name extension, name} of file scptPath
    if fileType is "osas" or fileExt is "scpt" then
        tell fa
            try
                make new script at end of scripts with properties {name:fileName}
            on error errstr
                display dialog errstr
            end try
        end tell
    end if

    enable fa process new changes ask
end tell

您可以将最后一行的 'ask' 更改为 'yes' 或 'no',具体取决于您是否要自动处理文件夹中已有的项目。