gpt4 book ai didi

AppleScript:如何检查某个东西是目录还是文件

转载 作者:行者123 更新时间:2023-12-04 04:13:19 25 4
gpt4 key购买 nike

更新:下面的解决方案

假设您有一个来自 Finder 的选定项目列表。假设有一些文件、文件夹、各种捆绑包,甚至一些应用程序包含在选择中。

现在假设您只想要那些(在 UNIX 术语中)目录中的项目。 IE。你只想要你可以的东西 cd到终端。

您可以查看每个项目的kind属性并查看它是否等于“文件夹”,但这不适用于应用程序包或其他包/包,尽管它们实际上是“文件夹”(目录)

如果项目是实际的文件对象(不是别名),您可以检查每个项目的 class属性...除了这也不总是有效,因为包现在是“文档文件”实例,而应用程序是“应用程序文件”实例。

如果您只有一个别名列表而不是实际文件对象,情况会更糟,因为您无法检查 class属性(property);它总是只说“别名”。

我能想到的唯一解决方案是获取每个项目的 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

最佳答案

有一个简单的applescript 解决方案。您可以使用系统事件检查某物是否是“包”。

tell application "Finder" to set theItems to (selection) as alias list

set canCDItems to {}
tell application "System Events"
repeat with anItem in theItems
if anItem is package folder or kind of anItem is "Folder" or kind of anItem is "Volume" then
set end of canCDItems to contents of anItem
end if
end repeat
end tell
return canCDItems

关于AppleScript:如何检查某个东西是目录还是文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6872007/

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