2013-03-11 158 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)