对Finder中选择的文件执行shell命令

时间:2015-10-15 20:42:10

标签: shell terminal applescript osx-services

我是一个非常新手和不常见的AppleScript实验者。我已经尝试了几个小时来学习以下任务的各个applescript命令,但我总是遇到错误。或许更善于使用AppleScript的人会发现这项任务变得简单快捷,为此我会非常感激。这是任务:

我希望能够在finder中手动选择文档或文件,然后在该文件上执行以下unix命令。然后我将脚本存储在Finder的“服务”菜单下。 unix命令是:

srm -rfv -m path/filename

在我的尝试中,我假设一个可以打开终端并执行命令的脚本将是可行的方法,但是无法正常工作。感谢任何能为我制作这样一个剧本的优秀程序员。

3 个答案:

答案 0 :(得分:2)

我的提示:使用Automator创建此类服务!

  1. 在Automator中创建新服务
  2. 选择"文件&夹"作为输入和" Finder"
  3. 添加"运行shell脚本"
  4. 选择"作为参数"作为输入
  5. echo "$f"更改为您的命令srm -rfv -m "$f"
  6. 将其另存为"安全删除"
  7. 从现在开始,如果您在Finder中选择一个文件,您会找到选项"安全删除"在上下文菜单中。

    享受,迈克尔/汉堡

答案 1 :(得分:1)

更新:我错过了 OP希望创建与Finder集成的OS X服务。 ShooTerKo's答案显示了如何做到这一点(他的解决方案甚至不需要使用AppleScript)。

这个答案唯一可能有趣的事情是,它演示了AppleScript命令,用于打开文件选择对话框,获取所选文件的POSIX路径并使用它运行shell命令,以及有关使用{执行shell命令的一些常规背景信息{1}}。

尝试以下方法:

do shell script

注意:

  • 没有明确的错误处理;如果您不希望脚本失败,则必须添加错误处理(# Let the user choose a file via an interactive dialog. set fileChosen to choose file # Get the file's POSIX path. set filePath to POSIX path of fileChosen # Use the path to synthesize a shell command and execute it. do shell script "echo srm -rfv -m " & quoted form of filePath )以处理用户取消文件选择和shell命令失败的情况(在这种情况下不太可能)。

  • shell命令前面有try ... on error ... end try以执行空运行(请参阅脚本编辑器的结果窗格中的输出);删除它以执行实际删除。

  • echo对于确保在shell命令中包含 as-is 非常重要(shell没有扩展(解释)的风险)。

  • quoted form of将不会打开终端窗口 - 它只会运行shell命令 hidden 并返回其stdout输出,这通常是您想要的。如果shell命令通过非零退出代码发出故障信号,则会引发错误。

答案 2 :(得分:0)

Craig的评论是相关的,但我只关注脚本本身,而不是shell命令。必须将脚本保存为应用程序,每次在其图标上放置一个或多个文件时,将对每个文件执行shell脚本命令:

QModelIndex index =this->indexAt(event->pos());
        this ->setCurrentIndex(index);

仍然要确保在你的shell命令'srm -rfv'中,'v'是必要的,因为这个脚本不会显示任何东西!我不这么认为。我也没有在删除过程中显示错误。你想对错误做什么(比如写保护,......)?