Сегодня в конец доканало то, что на диске C: не хватает места, хотя использую 128GB SSD. Программы все устанавливаю на другой диск, перенес рабочий стол, документы... Короче сделал всё, чтобы системный диск не засрался. Но ничего не помогло. В итоге на нем осталось всего 30MB свободного места.
В поисках решения нашел скрипт (спасибо автору), который ищет файлы больше определенного размера на диске и выводит в консоль список. Проблема была в том, что скрипт написан под Python 3. Ну и неудобство в том, что вывод осуществлялся в консоль. Оттуда путь к ненужному файлу не скопируешь и в проводник не вставишь. Именно поэтому представляю всем "нуждающимся" доработанную версию данного скрипта. Тестировалось под Python 2.7.3. Вывод сохраняется в файле CleanDiskFound.txt рядом со скриптом.
from __future__ import print_function
import os
from errno import EACCES, EPERM, ENOENT
class CleanDiskC:
total=0;
countFiles=0;
countFolders=0;
fileNotFoundError=list()
permissionError=list()
files=list()
found_str = "%s || %s\n"
def __init__(self, bigSize=50, state=True):
self.found = open("CleanDiskFound.txt", "w")
self.bigSize=bigSize
self.stateless=state
def print_error_message(self, e, file_name):
#PermissionError
if e.errno==EPERM or e.errno==EACCES:
print("PermissionError error({0}): {1} for:\n{2}".format(e.errno, e.strerror, file_name))
if self.stateless:
print("no access to folder: "+file_name)
else:
self.permissionError.append(file_name)
#FileNotFoundError
elif e.errno==ENOENT:
print("FileNotFoundError error({0}): {1} as:\n{2}".format(e.errno, e.strerror, file_name))
if self.stateless:
print("folder doesn\"t exist: "+file_name)
else:
self.fileNotFoundError.append(file_name)
elif IOError:
print("I/O error({0}): {1} as:\n{2}".format(e.errno, e.strerror, file_name))
elif OSError:
print("OS error({0}): {1} as:\n{2}".format(e.errno, e.strerror, file_name))
def printRow(self, size, path):
size=str(size)+"Mb"
while(len(size)<8):
size+=" "
print("|| "+size+"|| "+path)
self.found.write(self.found_str % (path, size))
def findBigFiles(self, path):
if not self.stateless:
print ("Progress: |", end="")
self.searchBigFiles(path)
if not self.stateless:
if len(self.fileNotFoundError)>0:
print("\n\nCan\"t find files:")
print("----------------------------")
for elem in self.fileNotFoundError:
print(elem)
print("----------------------------")
print("Total: "+str(len(self.fileNotFoundError))+" elements\n")
if len(self.permissionError)>0:
print("\n\nDon\"t have pernission to access folder:")
print("----------------------------")
for elem in self.permissionError:
print(elem)
print("----------------------------")
print("Total: "+str(len(self.permissionError))+" folders\n")
print("\nFiles with size more then "+str(self.bigSize)+"Mb:")
print("----------------------------")
self.files.sort(key=lambda x: x["size"], reverse=True)
for elem in self.files:
self.printRow(elem["size"], elem["path"])
print("----------------------------")
print("Total big files store: "+str(round(self.total/1024,1))+"Gb")
print("Total cheched: "+str(self.countFiles)+" files")
print("Total checked: "+str(self.countFolders)+" folders")
self.found.close()
def searchBigFiles(self, path):
self.countFolders+=1
try:
folder=os.listdir(path)
if path=="\\":
path=""
for element in folder:
if os.path.isfile(path+"\\"+element):
self.countFiles+=1
if not self.stateless:
if self.countFiles%10000==0:
print(str(self.countFiles)+"|",end="")
statinfo=os.stat(path+"\\"+element)
if(statinfo.st_size>1024*1024*self.bigSize):
size=round(statinfo.st_size/(1024*1024),1)
self.total+=size
if self.stateless:
self.printRow(size, path+"\\"+element)
else:
self.files.append({"size":size, "path":path+"\\"+element})
elif os.path.isdir(path+"\\"+element):
self.searchBigFiles(path+"\\"+element)
except (IOError, OSError) as e:
self.print_error_message(e,path)
#bigSize: default=50Mb
#stateless: default=True
do=CleanDiskC(50, False)
do.findBigFiles("\\")
далее следует разместить скрипт в корень диска и запустить:
python cleandisk.py