如何使用OS.Walk()在Python中处理OSX别名



我正在使用python 2.7.x遍历目录树,在遍历时获取文件和目录大小。我遇到的问题是,它正在错误地将别名文件误以为目录,然后引发一个错误,即"没有此类文件或目录"。

代码下面:

def get_size(start_path = '.'):
    total_size = 0
    for dirpath, dirnames, filenames in os.walk(start_path):
        for f in filenames:
            fp = os.path.join(dirpath, f)
            total_size += os.path.getsize(fp)
    return total_size
for dirName, subdirList, fileList in os.walk(rootDir, topdown=False):
    dirSize = get_size(dirName) #this throws an error on alias files
    for fname in fileList:
              #do other things

我也尝试了os.path.isdir(),但这无效。此外,我尝试了

return File.FSResolveAliasFile(path, True)[0].as_pathname()

,但这似乎并没有拾取所有别名文件。

有什么想法?

请参阅我在https://stackoverflow.com/a/21197881/838253上的评论。

简短的答案是您不能在Python中这样做。有一个解决别名的库,但这依赖于过时的碳库,不再起作用。

您可以在终端检测别名。

可能会区分,因为别名具有扩展属性。

MacoSX中似乎有三种类型的链接。

  • 别名(可以从右键单击菜单"创建别名"执行)
  • 软链接
  • 硬链接

别名链接似乎在MacOSX上是特定的。

和python 2.7似乎不识别别名链接为链接。

要确保尝试一下。

os.path.islink("./alias-you-created")
>>> False

因此,它不被视为链接。

imo我认为Python 2.7不支持MacOSX别名作为链接。但是我不明白为什么MacOSX具有这样的功能,太复杂了。

这是我发现的相关信息。

  • 什么是别名?
    • Mac OS X中的哪些别名,符号链接和硬链接?
    • 如何在Mac上创建和使用Symlink
    • 或 @ mark运行'ls -al'
  • python链接相关问题
    • os.walk()缺少目录的符号链接?
    • 如果文件是链接文件,如何找到链接的目标路径

最新更新