gpt4 book ai didi

macos - python : Check if a directory is an alias

转载 作者:行者123 更新时间:2023-12-02 21:36:45 24 4
gpt4 key购买 nike

Python 是否有一个简单的函数来检查目录是否是实际目录或者只是另一个目录的别名?我试图列出目录中的所有文件/文件夹,但由于这些别名文件夹,我丢失了如下所示的内容:

/System/Library/Java/JavaVirtualMachines/1.6.0.jdk/Contents/Home/bundle/Home/bundle/Home/bundle/Home/bundle/Home/bundle/Home/bundle/Home/bundle/Home/捆绑/首页/捆绑/首页/捆绑/首页/捆绑

Directory Alias

我知道我可以编写一个函数来比较路径并在看起来像是在兜圈子时退出,但是是否有一个简单的函数可以完全实现我不知道的功能?例如。 os.isAlias( ...路径名... )

谢谢!

最佳答案

这是一个 os.path.realpath 版本,适用于 Mac 别名以及 Python 2 下的符号链接(symbolic link):

from Carbon import File
def osx_realpath (path):
return File.FSResolveAliasFile(path, True)[0].as_pathname()

如果在递归到每个目录之前调用 osx_realpath,则应该避免重复。或者你可以定义类似的东西

def is_osx_realpath (path):
return path == osx_realpath(path)

但是,在这里您必须担心误报。如果您过滤 is_osx_realpath 并且您开始的路径是别名,您的程序将停止而不查看任何内容。

到目前为止,我不知道在 Python 3 下有什么方法可以做到这一点。我有一个问题 here我希望得到答案。现在我不能比使用 subprocess.call 做得更好了至invoke something that does the check on the command line .

编辑:我应该补充一点,Carbon.File 不仅在 Python 3 中不可用,而且已被弃用,因此最好在 Python 2 中避免使用 - 然而,这是我所知道的 Python 2 最实用的解决方案存在。

编辑2:这是一种检查文件是否是我认为对Python 3友好的别名的方法。但是,我没有解析别名的代码。我相信您需要安装 PyObjC。

from AppKit import NSWorkspace
def is_alias (path):
uti, err = NSWorkspace.sharedWorkspace().typeOfFile_error_(
os.path.realpath(path), None)
if err:
raise Exception(unicode(err))
else:
return "com.apple.alias-file" == uti

( source )

关于macos - python : Check if a directory is an alias,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21192167/

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