我来自 Linux,在 Linux 中很容易在 nautilus 或 dolphin 中针对一组文件运行脚本,但我有点惊讶地发现这在 OSX 中并不容易。
最好的情况下,我希望能够按住 Ctrl 键并单击 Finder 中的某些选择,选择我的脚本,然后弹出一个终端窗口来显示进度或任何用户交互。
答案1
最简单的内置方法是将项目从发现者到终端窗口。当你放下它们时,终端将“键入”其(转义的)路径名。然后,您可以使用 shell 的命令行编辑来输入命令的其余部分。或者,如果您提前考虑,您可以先键入命令,然后拖入项目。
“拖拽优先”版本:
- 选择并拖动一些发现者项目终端显示 shell 提示符的窗口。终端将插入(转义的)路径名。
- 键入Control+ A(转到行首;⌃A 是默认值,但因 shell/配置而异)。
- 输入您的命令和一个空格(它将插入到路径名之前)。
“提前思考”版本:
- 以任意顺序执行以下两项操作:
- 在一个终端窗口中,输入命令的初始部分和空格(除路径名之外的所有内容)。
- 选择一些项目发现者。
- 将选定的项目从发现者到终端输入命令的窗口。
- 激活终端窗口并按Return。
如果您需要更自动化的解决方案,您可以(如其他答案所示)转向 AppleScript 或 Automator。由于额外的“移动部件”可能会给解决方案增加一些复杂性,因此您必须权衡上述过程(手动但灵活)的好处与实施一个或多个自动化解决方案的复杂性。
一些自动化可能性包括:
- AppleScript Droplet 应用程序
- 通过内置脚本菜单或其他启动器启动的普通 AppleScript 程序
- 获取路径名发现者的选择
- Automator 工作流程、应用程序或发现者插入
- 可执行
.command
文件(通常是 shell 脚本;在发现者运行它终端)- 获取路径名发现者的选择(通过osascript)
- 一些已经提供您需要的功能的第三方工具
答案2
我认为没有办法直接做到这一点。您可以构建一个“Automator”应用程序来执行您要执行的一些操作。以下显示了 Automator 堆栈的样子:
将结果保存为应用程序,然后在查找器中选择文件,右键单击并选择“打开方式”,然后选择您的应用程序。(您可能需要在应用程序列表底部选择“其他...”。)
您无法使用此方法与脚本进行交互,但您可以循环遍历文件来执行某些 shell 脚本。
答案3
服务是如何操作系统处理这类事情。
在应用程序菜单(在本例中为“Finder”)下,(几乎)总是有一个Services
菜单选项,它将提供适用于当前应用程序的服务和其当前状态。通常,状态是所选对象的类型(文本、文件/文件夹等)。
可以在“系统偏好设置”面板中启用、禁用和分配键盘快捷键,其中只有最后三个才有意义Keyboard
。
要创建将 Shell 脚本应用于 Finder 中的文件/文件夹的服务:
发射自动机并创建一个新Service
类型的文档。
- 设置服务适用的对象类型(
files or folders
) - 设置该服务可用的应用程序(发现者)
- 或者有一个
Get Selected Finder Items
动作。
- 或者有一个
- 添加动作
Run Shell Script
- 决定是否要将输入作为参数或标准输入
它看起来应该是这样的:
自动机将会在您保存时自动将其放置在您的~/Library/Services
文件夹中,这样就可以(几乎)立即通过菜单Application -> Services
或上下文(右键单击)菜单使用它。
答案4
根据 commonpike 的回答,我创建了一个 AppleScript,它将所有放到其上的文件重定向到具有匹配名称的 shell 脚本。只需在 Apple 的 ScriptEditor 中将其另存为应用程序,然后重命名为 script.app 以匹配您的 script.sh https://github.com/PHolker/scripts/blob/master/DropScript.scpt