展开全部
#!/usr/bin/env python2
#-*- coding:utf-8 -*-
import os
from os.path import join,getsize,exists,isdir
def getdirsize(dir):
size=0L
for root,dirs,files in os.walk(dir):
size+=sum([getsize(join(root,name)) for name in files])
return size
def getsizeStr(size):
if 0==size: return '0'
if size/1024.0<1: return '<1KB'
if size/1024.0**2<1: return '%0.1fKB' % (size/1024.0)
if size/1024.0**3<1: return '%0.1fMB' % (size/1024.0**2)
return '%0.3fG' % (size/1024.0**3)
if __name__ == '__main__':
dirname=os.getcwd()
while True:
d=raw_input("please input a floder name(default:"+dirname+"):")
if exists(d):
dirname=d
break
elif d=='':
break
print '文件夹32313133353236313431303231363533e58685e5aeb931333361323465不存在,请重新输入'
#列出dirname中的子文件夹
subdirs=[dirs for dirs in os.listdir(dirname) if isdir(join(dirname,dirs))]
#由(子文件夹名,子文件夹大小)组成新的列表,并按size从大到小排序
dirsize=sorted([(d,getdirsize(join(dirname,d))) for d in subdirs],key=lambda s:s[1],reverse=True)
print '-------------------------------------'
print '序号 ,文件夹名称 ,大小:'
#显示所有子文件夹的总大小
print '0 , all sub dirs ,',getsizeStr(sum([size for d,size in dirsize]))
for d,size in dirsize:
print dirsize.index((d,size))+1, ', "'+d+'" ,', getsizeStr(size)
print '-------------------------------------'
#根据输入的序号,删除对应的文件夹
while True:
a=raw_input('请输入要删除的文件夹序号(0-'+str(len(dirsize))+'):')
if ''==a:
break
elif '0'==a:
b=raw_input('确认删除所有子文件夹?(y/n)')
if 'y'==b.lower():
for dirs in subdirs:
os.popen('rm -rf '+join(dirname,dirs))
print '操作完毕,已删除所有子文件夹'
break
elif a>='1' and a<=str(len(subdirs)):
deldir=dirsize[int(a)-1][0]
b=raw_input('确认删除文件夹"'+deldir+'"?(y)')
if ''==b or 'y'==b.lower():
os.popen('rm -rf '+join(dirname,deldir))
print '操作完毕,已删除文件夹"'+deldir+'",按回车键退出或输入其他序号继续'
else:
print '输入有误,按回车键退出或输入正确序号删除文件'
以上程序,复制粘帖到空白的gedit文件里,保存为cleardir.py
然后在保存的路径里打开终端,输入python cleardir.py
就可以查看当前路径下,所有子文件夹的大小,并删除不需要的文件了。
至于你说的linux程序定时执行,那是linux操作,不属于python的范畴了,自己学习一下linux的基础操作吧。