【发布时间】:2013-04-08 15:29:04
【问题描述】:
更新:以下解决方案
假设您有一个来自 Finder 的选定项目列表。假设选择中包含一些文件、文件夹、各种捆绑包,甚至一些应用程序。
现在假设您只想要那些(在 UNIX 术语中)目录的项目。 IE。你只想要在终端中可以cd 的项目。
您可以检查每个项目的kind 属性并查看它是否等于“文件夹”,但这不适用于应用程序包或其他包/包,尽管它们实际上是“文件夹”(目录)
如果项目是实际的文件对象(不是别名),您可以检查每个项目的 class 属性...但也不是总是有效,因为包现在是“文档文件”实例,而应用程序是“应用程序文件”实例。
如果你只有一个别名列表而不是实际的文件对象,那就更糟了,因为你不能检查class 属性;它总是只会说“别名”。
我能想到的唯一解决方案是获取每个项目的 POSIX 路径,并查看它是否有尾部正斜杠,或者将其路径发送到用不同语言编写的脚本,该脚本可以检查是否某事是否是目录。
我觉得这两个想法都很疯狂。检查尾部的正斜杠是非常麻烦和脆弱的,并且将所有内容提供给不同的脚本完全是多余的。
更新:Asmus 下面建议的似乎是唯一一个很好的解决方案,因为 AppleScript 似乎无法在它的自己的:
do shell script "file -b " & filePosixPath
这将返回文件夹、包、应用程序、包等的字符串“目录”。
但请注意(!)对于磁盘,它返回“粘性目录”。
这是一个运行良好的通用函数
on isDirectory(someItem) -- someItem is a file reference
set filePosixPath to quoted form of (POSIX path of (someItem as alias))
set fileType to (do shell script "file -b " & filePosixPath)
if fileType ends with "directory" then return true
return false
end isDirectory
【问题讨论】:
-
好吧,我想说最简单的解决方案是将 POSIX 路径交给命令行工具
file,例如file -b /Applications/Safari.app只返回“目录”。将其合并到do shell script循环中应该很容易。 -
@Asmus:你可能是对的。在我写完这个问题后,我意识到我可以只做一个快速的 shell 命令,而不是一个完整的 shell 脚本。尽管如此,必须走出 AppleScript 才能弄清楚某些东西是否是目录这样基本的东西似乎很奇怪。我会把这个问题搁置一天左右,在此期间,请随时写下您的评论作为答案,以便您获得积分:)
-
@Flambino 我不能为你的好问题投票,因为我已经用完了所有的投票! :(
-
@fireshadow52:呵呵,重要的是思想——谢谢 :)
标签: applescript