我有一個腳本,我每晚運行一次以獲取存儲在服務器上特定目錄中的東西。這是我使用的是核心部分功能: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 TB)。與du
我得到 28 TB(我現在重新運行沒有-h
獲得以字節爲單位的值)。
顯然,Python函數缺少一些東西,但我不確定是什麼或如何。有任何想法嗎?
'du'措施對磁盤使用量(因此,向上舍入到文件系統塊大小),而'os.path.getsize()'返回的文件內容字節大小。但是,如果你的目錄包含很多很多的小文件,這隻能解釋這麼大的差別。 –
至少有60,000到100,000個小文件 - 足以說明這一點嗎? – dongle