一个简单的脚本实现按空间和时间来删除日志:
代码如下:
#!/usr/bin/python
import os,optparse,re,time,datetime
################################################ Defined variable
file_object=open('/tmp/clean.log','a')
today=datetime.date.today()
nowtime=time.asctime(time.localtime(time.time()))
################################################ Defined function
def operate(filename=None,directory=None,time=None,size=None):
print("---Start program")
if options.name:
if '*' in options.name:
filename=re.sub(r'\*','',options.name)
if options.days:
time=int(options.days)
opertime=today - datetime.timedelta(days=time)
print ("Note:Opertime is %s" %(opertime))
if options.size:
print ("Note:Operszie bigger than %sMB"%options.size)
options.size=int(options.size)
def delete():
os.system("rm %s/%s" % (A,filenamelist2))
print("%s delete %s/%s done" % (nowtime,A,filenamelist2))
file_object.write("%s delete %s/%s Done\n" % (nowtime,A,filenamelist2))
def compress():
gz=".gz"
if not filenamelist2.endswith(gz):
os.system("gzip %s/%s" % (A,filenamelist2))
print("%s compress %s/%s done" % (nowtime,A,filenamelist2))
file_object.write("%s compress %s/%s Done\n" % (nowtime,A,filenamelist2))
def clear():
os.system("echo "" > %s/%s" % (A,filenamelist2))
print("%s clear %s/%s done" % (nowtime,A,filenamelist2))
file_object.write("%s clear %s/%s Done\n" % (nowtime,A,filenamelist2))
def judge():
if options.oper=='delete':
delete()
elif options.oper=='compress':
compress()
elif options.oper=='clear':
clear()
else:
print "Invalid parameter for --operation"
for A,B,filenamelist in os.walk('%s' %directory):
for filenamelist2 in filenamelist:
if filename in filenamelist2:
if time != None and size == None:
filetime=(datetime.datetime.fromtimestamp(os.path.getmtime("%s/%s"%(A,filenamelist2)))).strftime('%Y-%m-%d')
if str(filetime) < str(opertime):
judge()
elif time == None and size != None:
filesize=os.path.getsize("%s/%s"%(A,filenamelist2))/float(1024*1024)
if int(filesize) > int(size):
judge()
elif time != None and size != None:
filetime=(datetime.datetime.fromtimestamp(os.path.getmtime("%s/%s"%(A,filenamelist2)))).strftime('%Y-%m-%d')
filesize=os.path.getsize("%s/%s"%(A,filenamelist2))/float(1024*1024)
if str(filetime) < str(opertime) and int(filesize) > int(size):
judge()
else:
judge()
file_object.close()
print("---Quit program")
################################################## Main program
if __name__ == "__main__":
print "---------------------------------------------------------"
print "Standard Log Cleaning Program by Bowen"
print "---------------------------------------------------------"
parser=optparse.OptionParser()
parser.add_option("-o","--operation",dest="oper",default="default",help="Choose operation [delete|compress|clear]-(Must) --operation delete:like rm file --operation compress:like gzip file --operation clear:like : > file")
parser.add_option("-f","--filename",dest="name",default="default",help="Specify operating filename-(Must)")
parser.add_option("-d","--directory",dest="dire",default="default",help="Specify operating directory-(Must)")
parser.add_option("-t","--days",dest="days",help="Operate file at specified days ago-(May) eg:--days=2 is two days ago")
parser.add_option("-s","--size",dest="size",help="Operate file bigger than specified MB-(May) eg:--size=2 is two MB")
options,_=parser.parse_args()
##################### Call
if options.oper != 'default' and options.dire != 'default' and options.name != 'default':
operate(options.name,options.dire,options.days,options.size)
else:
parser.print_help()