递归目录大小包括两次符号链接

时间:2013-10-18 21:42:00

标签: python filesystems

我从Stack Overflow上的一个问题中获取了代码来测量目录的大小:

def dirSize(directory):
    totalSize = 0
    for dirpath, dirnames, filenames in os.walk(directory):
        for f in filenames:
            fp = os.path.join(dirpath, f)
            totalSize += os.path.getsize(fp)
    return totalSize

但如果我有这个目录:

ls -l
    -rw-r--r-- 1 lucas lucas 5120000 Oct 18 17:36 x
    lrwxrwxrwx 1 lucas lucas       1 Oct 18 17:34 y -> x

我在上面运行该功能,我明白了:

10240000

它似乎将符号链接计为它们链接到的文件的大小,而不是实际的4KB。我该如何解决这个问题?

2 个答案:

答案 0 :(得分:1)

怎么样

totalSize += os.path.getsize(fp) if not os.path.islink(fp) else 4096 

答案 1 :(得分:1)

只需将参数followlinks=False传递给os.walk即可。有关详细信息,请参阅documentation