如何使用 Finder 中选定的文件/文件夹执行 Shell 脚本?

如何使用 Finder 中选定的文件/文件夹执行 Shell 脚本?

我来自 Linux,在 Linux 中很容易在 nautilus 或 dolphin 中针对一组文件运行脚本,但我有点惊讶地发现这在 OSX 中并不容易。

最好的情况下,我希望能够按住 Ctrl 键并单击 Finder 中的某些选择,选择我的脚本,然后弹出一个终端窗口来显示进度或任何用户交互。

答案1

最简单的内置方法是将项目从发现者终端窗口。当你放下它们时,终端将“键入”其(转义的)路径名。然后,您可以使用 shell 的命令行编辑来输入命令的其余部分。或者,如果您提前考虑,您可以先键入命令,然后拖入项目。

“拖拽优先”版本:

  1. 选择并拖动一些发现者项目终端显示 shell 提示符的窗口。终端将插入(转义的)路径名。
  2. 键入Control+ A(转到行首;⌃A 是默认值,但因 shell/配置而异)。
  3. 输入您的命令和一个空格(它将插入到路径名之前)。

“提前思考”版本:

  1. 以任意顺序执行以下两项操作:
    • 在一个终端窗口中,输入命令的初始部分和空格(除路径名之外的所有内容)。
    • 选择一些项目发现者
  2. 将选定的项目从发现者终端输入命令的窗口。
  3. 激活终端窗口并按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
  • 决定是否要将输入作为参数或

它看起来应该是这样的:

示例 shell 脚本

将会在您保存时自动将其放置在您的~/Library/Services文件夹中,这样就可以(几乎)立即通过菜单Application -> Services或上下文(右键单击)菜单使用它。

测试文件夹

生成的 TextEdit 文档

答案4

根据 commonpike 的回答,我创建了一个 AppleScript,它将所有放到其上的文件重定向到具有匹配名称的 shell 脚本。只需在 Apple 的 ScriptEditor 中将其另存为应用程序,然后重命名为 script.app 以匹配您的 script.sh https://github.com/PHolker/scripts/blob/master/DropScript.scpt

相关内容