2013-03-11 154 views
-2
a = '/mnt/task/a' 
b = '/mnt/task/b' 

ab
有一些文件夹,与像201212194546921-6ab-45654545d-5445c
正如你看到的名称,文件夹的名字是由东西如序列号和日期时该文件夹已生成。
如果我想删除某个时间点之前生成的文件夹,我如何查找并删除它们,例如:
上周前删除文件夹与Python脚本删除文件夹

任何人都可以在这里帮助我吗?

+1

结帐[python的os模块(http://docs.python.org/2.7/library/os.html#module-os)尝试一些东西,并更新你的一些代码,当你被卡住质疑 – 2013-03-11 09:31:58

+0

并尝试更好地格式化您的问题。这很难阅读。干杯。 – wrgrs 2013-03-11 10:11:09

+0

你想包含子文件夹吗? – pradyunsg 2013-03-11 11:32:43

回答

0

有几个Python模块,可以帮助你做到这一点:在给定的路径 os.path.getctime(fileName)回报文件创建日期的所有文件夹 os.walk(path)迭代。 shutil.rmtree(folder)删除文件夹及其内容

,如果你把它们放在一起,你会得到这样的事情:

import os 
import time 
import shutil 

for folder ,subFolder, filenames in os.walk('/mnt/task/a'): 
    print folder , time.ctime(os.path.getctime(folder)) 

    if os.path.getctime(folder) < (time.time() - 60*60*24*7): 
     print 'deleting: ' , folder 
     #shutil.rmtree(folder) 
     while subFolder: 
      subFolder.pop() 

注意这个代码删除文件夹,只基于文件创建时间! 除文件日期外,您可能还需要更多逻辑。

+0

OP想要使用文件的名称,而不是文件的创建时间,尽管它们用于相同的目的... – pradyunsg 2013-03-11 18:00:55

0

假设你要删除的文件夹是直接在ab
下面的代码创建的每个文件夹的日期时间对象,然后使用日期之间的差来确定要删除的文件夹中。

import os, datetime, errno, stat, shutil 
a = 
b = 

date = '' 
ref = datetime.date(2013,12,20) 

def parse_name(fname): 
    '''Returns False when unsucessful, datatime.date() when successful''' 
    if len(fname) > 9: 
     try: 
      year = int(fname[:4]) 
      month = int(fname[4:6]) 
      day = int(fname[6:8]) 
      return datetime.date(year, month, day) 
     except ValueError,e: 
      return False 
    else: 
     return False 

f2remove = [] 
for dirc in (a,b): 
    for item in os.listdir(dirc): 
     if os.path.isdir(os.path.join(dirc,item)): 
      x = parse_name(item) 
      if x and (ref - x).days >= 0: 
       f2remove.append(os.path.join(dirc,item)) 

# --- deleting files --- # 
for filename in f2remove: 
    print 'removing', filename.split('\\')[-1] 
    shutil.rmtree(filename)