gpt4 book ai didi

file - 使用 AppleScript 删除文件以回收站或永久

转载 作者:行者123 更新时间:2023-12-01 23:54:38 25 4
gpt4 key购买 nike

我正在编写一个 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 命令或我忽略的删除命令的参数,以便我能够简化上面的脚本?

最佳答案

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 theFiletheFile as POSIX file (后缀形式) - 不要问我为什么。
  • System Events上下文:使用“强制转换”alias提供的 POSIX 路径是唯一对我有用的命令形式。


  • 也就是说,对您的原始函数稍作调整也可以使其工作(除非您一个一个地删除许多文件,否则性能可能无关紧要):

    但是请注意,仅使用 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 ,正确编码空格等字符。

    关于file - 使用 AppleScript 删除文件以回收站或永久,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24721329/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com