使用AppleScript删除文件以回收bin或永久

时间:2014-07-13 09:35:46

标签: file applescript delete-file

我正在编写一个AppleScript,我想插入一个子程序来删除指定的文件。使用标志我希望控制给定文件是移动到回收站还是永久删除。

实际上我的脚本看起来像这样:

on MyDeleteProc(theFile, allowUndo)
  if allowUndo then
    tell application "Finder" to delete POSIX file theFile
  else
    do shell script "rm " & theFile
  end if
end MyDeleteProc

现在我想知道这种情况到目前为止是否正确,或者是否有其他Finder命令或我忽略的删除命令参数,以便我能够简化上面的脚本?

3 个答案:

答案 0 :(得分:2)

AppleScript是一个脾气暴躁的野兽,而魔鬼常常在细节中。

虽然@adayzdone's answer提供了关键指针 - 使用System Events应用程序的delete命令来实现永久删除,但确定语法的确切需要反复试验:

警告:此处理程序适用于文件和文件夹 - 定位文件夹allowUndo设置为false因此永久删除该文件夹的整个子树

on MyDeleteProc(theFile, allowUndo)
  if allowUndo then
    tell application "Finder" to delete theFile as POSIX file
  else
    tell application "System Events" to delete alias theFile
  end if
end MyDeleteProc

在OS X 10.9.4上,我必须执行以下操作才能完成这项工作:

  • Finder上下文:必须将POSIX file theFile更改为theFile as POSIX file(后缀形式) - 不要问我原因。
  • System Events上下文:在提供的POSIX路径中使用“cast”alias是对我有用的唯一命令形式。

也就是说,对原始函数进行一些调整也会使它工作(除非你逐个删除许多文件,性能可能无关紧要):

但请注意,仅使用rm仅适用于文件 - 如果您想将其扩展到文件夹,请改用rm -rf - 相同警告重新永久删除整个子树适用。

on MyDeleteProc(theFile, allowUndo)
  if allowUndo then
    tell application "Finder" to delete theFile as POSIX file
  else
    do shell script "rm " & quoted form of theFile
  end if
end MyDeleteProc

请注意使用quoted form of,它可以安全地将文件路径传递给shell,正确编码空格等字符。

答案 1 :(得分:1)

您可以使用系统事件永久删除文件。

答案 2 :(得分:0)

finder只显示带有文件说明符的删除,找不到其他选项

Finder dictionary reference

像adayzdone一样,你可以使用系统事件永久删除一个项目。

enter image description here

这些屏幕标题来自“Finder”和“系统事件”词典,只需转到AppleScript中的文件菜单,然后选择打开字典。另一个值得关注的好消息是“标准增加”

enter image description here

我希望这可以帮助你:)