使用:
foldercleanup.py -d 10 -k c:\test\keepfile.txt c:\test
表示對c:\test目錄只保留最近10天的子文件夾和keepfile.txt中指定的子文件夾。
代碼:
import os
import os.path
import datetime
?
def getOption():
? from optparse import OptionParser
?
? des?? = "clean up the folder with some options"
? prog? = "foldercleanup"
? ver?? = "%prog 0.0.1"
? usage = "%prog [options] foldername"
?
? p = OptionParser(description=des, prog=prog, version=ver, usage=usage,add_help_option=True)
? p.add_option('-d','--days',action='store',type='string',dest='days',help="keep the subfolders which are created in recent %days% days")
? p.add_option('-k','--keepfile',action='store',type='string',dest='keepfile',help="keep the subfolders which are recorded in text file %keepfile% ")
? options, arguments = p.parse_args()
?
? if len(arguments) != 1:
??? print("error: must input one directory as only one parameter ")
??? return
?
? return options.days, options.keepfile, arguments[0]?
?
def preCheckDir(dir):
? if(not os.path.exists(dir)):
??? print("error: the directory your input is not existed")
??? return
? if(not os.path.isdir(dir)):
??? print ("error: the parameter your input is not a directory")
??? return
???
? return os.path.abspath(dir)
?
def isKeepByDay(dir, day):
? indays = False
? if( day is not None) :
??? t = os.path.getctime(dir)
??? today = datetime.date.today()
??? createdate = datetime.date.fromtimestamp(t)
??? indate = today - datetime.timedelta(days = int(day))
??? print (createdate)
??? if(createdate >= indate):
????? indays = True
? print (indays)
? return indays
?
def isKeepByKeepfile(dir, keepfile):
? needkeep = False
? print (dir)
? if (keepfile is not None):
??? try :
????? kf = open(keepfile,"r")
????? for f in kf.readlines():
??????? print (f)
??????? if (dir.upper().endswith("\\" + f.strip().upper())):
????????? needkeep = True
????? kf.close()
??? except:
????? print ("error: keep file cannot be opened")
? print(needkeep)
? return needkeep
???
def removeSubFolders(dir, day, keepfile):
? subdirs = os.listdir(dir)
? for subdir in subdirs:
??? subdir = os.path.join(dir,subdir)
??? if ( not os.path.isdir(subdir)):
????? continue
??? print("----------------------")
??? if( (not isKeepByDay(subdir, day))and (not isKeepByKeepfile(subdir, keepfile))):
????? print("remove subfolder: " + subdir)
????? import shutil
????? shutil.rmtree(subdir,True)
???
def FolderCleanUp():
? (day, keepfile, dir) = getOption()
? dir = preCheckDir(dir)
? if dir is None:
??? return
? removeSubFolders(dir,day,keepfile)
?
if __name__=='__main__':
? FolderCleanUp()
對目錄下保留最后的zip文件:
def KeepLastNumZips(num)
??? def extractTime(f):
??????? return os.path.getctime(f)
??? zipfiles = [os.path.join(zipdir, f)
??????????????? for f in os.listdir(zipdir)
??????????????? if os.path.splitext(f)[1] == ".zip"]
??? if len(zipfiles) > num:
??????? zipfiles.sort(key=extractTime, reverse=True)
??????? for i in range(num, len(zipfiles)):
??????????? os.remove(zipfiles[i])
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
