IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    脚本分享--删除指定目录下过期文件

    深夜的蚊子发表于 2012-08-18 05:06:41
    love 0

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

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

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

    脚本如下:

    #! /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) <= float(four_weeks_ago_timestamps):
    		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()

    © 2012, 深夜的蚊子. 版权所有. 如转载,请注明:转载自 蚊子空间[http://www.wenzizone.cn]

    没找到相关文章.



沪ICP备19023445号-2号
友情链接