跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

Python删除指定目录下过期文件的2个脚本分享

脚本1:

这两天用python写了一个删除指定目录下过期时间的脚本。也可能是我初学python,对python还不够熟习,总觉得这个脚本用shell写应该更简单也更容易些。

就功能上来说,该脚本已经实现了我想要的效果,不过该脚本还不够通用性,还有更多可以完善的地方。目前该脚本在python2.4下运行良好。同时,我在脚本中加入了对python版本的判断,理论上2.7下也应该可以正常使用。有环境的朋友可以帮忙测试一下。

该脚本不完善的地方在于,只能支持一级目录下的文件删除,还不支持目录递归。同时过期文件的定义只能按week来做。

Python代码:

复制代码代码如下:#! /usr/bin/env python# -*- coding=utf-8 -*-import sys import os import time,datetime# 定义需要删除文件的目录dir = '/data/webbak/'# 被删除文件写入日志文件logdir = '/var/log'logfile = os.path.join(logdir, 'delete.log')# 获取当前系统python版本ver = sys.version ver = ver.split(' ') ver = ver[0]# 将"Wed Jul  4 13:25:59 2012"格式的时间转成“2012-07-02 14:50:15”格式的时间# version是当前系统python版本号# time是"Wed Jul  4 13:25:59 2012"格式的时间# 函数返回"2012-07-02 14:50:15"格式的时间def string2time(str_time, version = ver):version_l = version.split('.')[0:2]ver = version_l[0] + '.' + version_l[1]if (ver == '2.7'):f_time = datetime.datetime.strptime(str_time, time_format) f_time = f_time.strftime('%Y-%m-%d %H:%M:%S') return f_time elif(ver == '2.4'):f_time = time.strptime(str_time, time_format) f_time = datetime.datetime(*f_time[0:6]) return f_time# 时间格式time_format = "%a %b %d %H:%M:%S %Y"# 取得当前时间today = datetime.datetime.now()# 定义4个星期four_weeks = datetime.timedelta(weeks=6)# 4星期前的日期four_weeks_ago = today - four_weeks# 将时间转成timestamps four_weeks_ago_timestamps = time.mktime(four_weeks_ago.timetuple())# 列出目录中的所有文件files = os.listdir(dir)# 打开要删除的文件日志fh = open(logfile, "w+")# 遍历文件,打印出文件的创建时间for f in files:# 忽略掉.开头的文件if f.startswith('.'):continue# 忽略掉当前目录下的目录if os.path.isdir(os.path.join(dir,f)):continue# 获得文件的modify时间,并转换成timestamp格式file_timestamp = os.path.getmtime(os.path.join(dir, f)) file_time_f = string2time(time.ctime(file_timestamp)) if float(file_timestamp)   fh.write(str(today) + "\t" + str(file_time_f) + "\t" + os.path.join(dir,f) + "\n") os.remove(os.path.join(dir,f))# 关闭文件fh.close()脚本2:实现类似下面的Shell命令的操作Python 3.14.3微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。

下载复制代码代码如下:find  /data/log -ctime +5 | xargs  rm  -f

Python代码:

复制代码代码如下:import os import sys import time class DeleteLog:def __init__(self,fileName,days):self.fileName = fileName self.days = days def delete(self):if os.path.isfile(self.fileName):fd = open(self.fileName,'r') while 1:buffer = fd.readline() if not buffer : break if os.path.isfile(buffer):os.remove(buffer) fd.close() elif os.path.isdir(self.fileName):for i in [os.sep.join([self.fileName,v]) for v in os.listdir(self.fileName)]:print i if os.path.isfile(i):if self.compare_file_time(i):os.remove(i) elif os.path.isdir(i):self.fileName = i self.delete() def compare_file_time(self,file):time_of_last_access = os.path.getatime(file) age_in_days = (time.time()-time_of_last_access)/(60*60*24) if age_in_days > self.days:return True return False if __name__ == '__main__':if len(sys.argv) == 2:obj = DeleteLog(sys.argv[1],0) obj.delete() elif len(sys.argv) == 3:obj = DeleteLog(sys.argv[1],int(sys.argv[2])) obj.delete() else:print "usage: python %s listFileName|dirName [days]" % sys.argv[0]sys.exit(1)

相关文章