3

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

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

有什么想法吗?

4

2 回答 2

0

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

简短的回答是你不能在 Python 中做到这一点。有一个解析别名的库,但这依赖于一个过时的 Carbon 库,不再有效。

您可以在终端检测别名。

由于别名具有扩展属性,因此可能可以进行区分。

于 2014-03-08T02:03:13.513 回答
0

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

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

别名链接似乎特定于 MacOSX。

而 python 2.7 似乎没有将别名链接识别为链接。

为了确保,试试这个。

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

所以它不被视为链接。

IMO 我认为 python 2.7 不支持 MacOSX Alias 作为链接。但是我不明白为什么MacOSX有这样的功能,太复杂了。

这是我找到的相关信息。

于 2014-03-08T02:08:29.310 回答