我正在创建一个实用程序,将遍历目录并获取所有子目录和文件的大小并存储该值。但是,大小计算不正确。
这是我的类,它会自动递归遍历所有子目录:
然而,当我尝试使用du命令时,我得到了以下结果。
这是我的类,它会自动递归遍历所有子目录:
class directory:
'''
Class that automatically traverses directories
and builds a tree with size info
'''
def __init__(self, path, parent=None):
if path[-1] != '/':
# Add trailing /
self.path = path + '/'
else:
self.path = path
self.size = 4096
self.parent = parent
self.children = []
self.errors = []
for i in os.listdir(self.path):
try:
self.size += os.lstat(self.path + i).st_size
if os.path.isdir(self.path + i) and not os.path.islink(self.path + i):
a = directory(self.path + i, self)
self.size += a.size
self.children.append(a)
except OSError:
self.errors.append(path + i)
我有一个视频目录,我正在使用这个程序进行测试:
>>> a = directory('/var/media/television/The Wire')
>>> a.size
45289964053
然而,当我尝试使用du命令时,我得到了以下结果。
$ du -sx /var/media/television/The\ Wire
44228824
这些目录不含任何链接或特殊内容。
有人能解释一下为什么os.stat()
会给出奇怪的大小读数吗?
平台:
- Linux(Fedora 13)
- Python 2.7