在Applescript中执行shell时是否有一种方法可以忽略不允许的访问?



所以我想在AppleScript的shell中使用find命令。我想在整个磁盘中搜索某个文件类型,所以我做了这样的操作:

set theItems to do shell script "find / -name '*.mp3'" with administrator privileges
set theItems to paragraphs of theItems
repeat with theFile in theItems
    --some code that process every file here
end repeat

问题是,即使我添加了额外的with administrator privileges,一些文件仍然属于系统,我无法访问它们。在我的循环中,我有一些代码来处理这些行。

有没有一种方法可以忽略这些?

由于find命令访问某些文件/目录时出现错误,它将报告错误并以错误状态退出;当do shell script看到这个错误时,它抛出一个自己的applescript级别的错误。

您可以通过在末尾添加|| true来使脚本始终成功。在shell语言中,这意味着"如果find命令失败(以错误状态退出),则运行true,它总是成功的,因此整个脚本成功。

我不认为这是必要的,但是通过添加2>/dev/null来抑制find打印的错误消息可能也很好(尽管do shell script似乎忽略了这些消息,只要整个命令成功)。

set theItems to do shell script "find / -name '*.mp3' 2>/dev/null || true" with administrator privileges

我确实有一个警告,但是:这抑制了所有错误从find,而不仅仅是权限错误,所以如果其他东西出错,你不会被通知。

相关内容

  • 没有找到相关文章

最新更新