Я создаю утилиту, которая будет проходить через каталоги, получать размеры дочерних каталогов и файлов для всех каталогов и сохранять их значение. Тем не менее, размеры не рассчитаны правильно.
Вот мой класс, который автоматически проходит через все подкаталоги:
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