我有一个接受两个参数的 shell 脚本:
- 完整文件路径
- 文件名
如何使用 Automator 向 Finder 添加上下文菜单项,以便使用所选文件路径和文件名作为参数来运行 shell 脚本?
答案1
选择创建一个服务在 Automator 中接收选定的文件和文件夹作为输入发现者仅。添加运行 Shell 脚本行动和将输入作为参数传递。
您收到的参数是所选文件和文件夹的完整 Unix 路径。使用growlnotify
,部分咆哮为了演示目的:
在文件上运行它后产生的咆哮消息:
该命令显示在 Finder 中文件或文件夹的上下文菜单中。如果适用的命令太多,服务,它们被分组到一个子菜单中服务。
如果您的脚本需要两个都完整文件路径,以及文件名,您可以执行以下操作,首先从完整路径中提取文件名:
for f in "$@"
do
name="$( basename $f )"
/usr/local/bin/growlnotify "$name" -m "$f"
done
您可以看到,在 Growl 中,文件名用作标题,而路径用作消息:
如果您需要查询其他输入,可以执行简短的 AppleScript 来执行此操作。以下是一个完整的 shell 脚本(如上文所述growlnotify
),用于查询输入并将所选文件重命名为新名称。我没有包括错误处理等,例如,在新文件名中添加冒号和斜杠可能会破坏脚本。
# repeat for every file in selection
for f in "$@"
do
# capture input of a simple dialog in AppleScript
OUT=$( osascript -e "tell application \"System Events\" to text returned of (display dialog \"New Name of $f:\" default answer \"\")" )
# if the user canceled, skip to the next file
[[ $? -eq 0 ]] || continue
# old file name is the loop variable
OLD="$f"
# new file name is the same directory, plus the user's input
NEW="$( dirname "$OLD" )/$OUT"
# print a message announcing the rename
/usr/local/bin/growlnotify "Renaming…" -m "$OLD to $NEW"
# perform the actual rename
mv "$OLD" "$NEW"
done
通过以下方式公布的重命名操作示例的屏幕截图growlnotify
: