У меня есть сценарий, который я запускаю каждую ночь, чтобы получить запас вещей, хранящихся в определенном каталоге на моем сервере. Это функция, я использую для этой основной части:Разница в размере файла между командой du и функцией Python
def get_size(start_path = '.'):
total_size = 0
for dirpath, dirnames, filenames in os.walk(start_path):
for f in filenames:
try:
fp = os.path.join(dirpath, f)
total_size += os.path.getsize(fp)
print str(total_size)+" bytes/"+str(size(total_size))+" counted"+" <------------ current position: "+start_path+" : "+f
for location in locations_dict:
if locations_dict[location][1] != "":
print str(location)+": "+str(size(locations_dict[location][1]))
except OSError, e:
print e
return total_size
По некоторым причинам, я получаю другое значение, когда я вручную запустить
$ du -hc [path to dir]
С Python я получаю 20551043874445 байт (превращается в 20,5 ТБ). С du
я получаю 28 ТБ (я возвращаюсь теперь без -h
, чтобы получить значение в байтах).
Ясно, что функция Python что-то не хватает, но я не уверен, что и как. Есть идеи?
'du' измеряет количество используется на диске (так, округленные до размера блока файловой системы), в то время как' os.path.getsize() 'возвращает размер в байтах содержимого файла. Но это может объяснить только эту значимость, если ваш каталог содержит множество и множество небольших файлов. –
Есть, по крайней мере, от 60 000 до 100 000 мелких файлов - этого достаточно, чтобы учесть это? – dongle