我偶尔会写一些方便操作的小脚本,统一放置到/usr/local/script/目录,为了防止忘记,该目录还有一个readme文件,记录了每个脚本的源码位置和简短描述

几乎每个脚本都是在命令行里面执行的,今天心血来潮,是否能很方便的将脚本移植到文件管理器的右键点击菜单栏那里。摸索了一番还挺简单。记录一下,主要是使用Automator完成。

  1. 打开Automator -> File -> New -> 选择Quick Action

28GfmS

  1. 选择 files or foldersFinder,在左侧搜索Run Shell Script,输入如下代码
1
2
3
4
for f in "$@"
do
/usr/local/script/srt2txt "$f"
done

1SLYkg

  1. File -> Save

至此,基本上就可以了。在Finder中选择文件,右键,或者你打开预览,就可以了看到你添加的快捷方式了。如图

DtBaGv

但是这样存在一个缺点,它默认对每个文件增加了该快捷方式。但是实际上我只需要当它是srt后缀的时候才需要。单纯的Automator没有实现这个过滤,需要依靠info文件实现

~/Library/Services/ 目录下会找到你写的自动化,会存在一个类似如下内容的Info.plist文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
<key>NSServices</key>
<array>
<dict>
<key>NSBackgroundColorName</key>
<string>background</string>
<key>NSIconName</key>
<string>NSActionTemplate</string>
<key>NSMenuItem</key>
<dict>
<key>default</key>
<string>SRT2TXT</string>
</dict>
<key>NSMessage</key>
<string>runWorkflowAsService</string>
<key>NSRequiredContext</key>
<dict>
<key>NSApplicationIdentifier</key>
<string>com.apple.finder</string>
</dict>
<key>NSSendFileTypes</key>
<array>
<string>public.item</string>
</array>
</dict>
</array>
</dict>
</plist>

此处可以看到NSSendFileTypes的值是public.item,需要修改为适配SRT。使用系统自带的mdls -name kMDItemContentType <FILE_PATH>即可得到,比如我的SRT文件得到的值为 dyn.ah62d4rv4ge81g6xy,看着像乱码,但是它能用🤷,修改替换掉 public.item 即可

至此,该自动化仅仅在srt后缀的文件才出现,完美

参考

Show specific Quick Action for specific file extension

Creating Custom Finder Quick Actions With Automator