Automator / Applescript + shell脚本:获取父文件夹名称

时间:2015-04-07 19:43:46

标签: shell applescript

我有一个Automator工作流程,它利用这个shell脚本来获取托管通过此工作流程运行的文件的目录的名称。稍后我将该目录名称作为文件的注释。

for f in "$@"
do
    filepath=$(dirname "$f")
    dirname=$(basename "$filepath")

echo "$dirname"
done

每当我在其上抛出多个文件时,目录名称不会反映一次(正如我想的那样),但是我丢弃了多少文件。然后,这会多次添加相同的评论。

我该如何解决?

enter image description here

编辑: 我想尝试消除Automator并单独使用Applescript + Shell。 如何让shell返回目录名?现在它只是在对话框中给我$dirname ...

on adding folder items to theWatchedFolder after receiving theDetectedItems
    set dirName to do shell script "for f in '$@'
do
    filepath=$(dirname '$f')
    dirname=$(basename '$filepath')

echo '$dirname'
done"
    display alert dirName
end adding folder items to

2 个答案:

答案 0 :(得分:0)

on adding folder items to thisFolder after receiving added_items
    repeat with aFile in added_items
        tell application "Finder"
            set parentpath to POSIX path of (parent of (aFile) as string)
            set comment of aFile to parentpath
        end tell
    end repeat
end adding folder items to

答案 1 :(得分:0)

我会选择Applescript Droplet。

将此代码保存为应用程序。

当您从单个目录或多个目录中删除文件时,它会使用自己的原始目录对每个文件进行注释。

然后将文件移动到列出的移动文件夹。

property moveFolder : "Macintosh HD:Users:USERNAME:fooDIR:"

on open theseFiles

    repeat with i from 1 to number of items in theseFiles
        set this_item to item i of theseFiles
        tell application "Finder"
            set parentpath to POSIX path of (parent of (this_item) as string)
            set comment of this_item to parentpath
        end tell
    end repeat

    tell application "Finder"

        move theseFiles to moveFolder
    end tell
end open

您可以使用choose命令来选择移动文件的位置而不是硬编码,但是文件可能并不总是在一个批次中传递到Droplet,即使这是如何将它们放到它上面的。这意味着`选择对话框可能会显示多次,似乎只是一次运行。

但上述希望能给你一个起点。