所以我想在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
,而不仅仅是权限错误,所以如果其他东西出错,你不会被通知。