如何使用os.walk()处理Python中的OSX别名?

时间:2014-03-07 23:37:04

标签: python macos os.walk os.path

我正在使用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()

但是这似乎没有拿起所有别名文件。

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

有关背景,请参阅我对https://stackoverflow.com/a/21197881/838253的评论。

简短的回答是你不能用Python做到这一点。有一个库解决了别名,但这依赖于一个过时的碳库,不再有效。

您可以在终端上检测别名。

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

答案 1 :(得分:0)

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

  • 别名(可以通过右键菜单“创建别名”执行)
  • 软链接
  • 硬链接

别名链接似乎是特定于MacOSX。

并且python 2.7似乎没有将Alias链接识别为链接。

要确保,请尝试此操作。

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

所以它不被视为链接。

IMO我认为python 2.7不支持MacOSX Alias作为链接。但我无法理解为什么MacOSX具有这样的功能,它太复杂了。

以下是我发现的相关信息。