-2
a = '/mnt/task/a'
b = '/mnt/task/b'

と の下aにはb、の
ような名前のフォルダがいくつかあります201212194546921-6ab-45654545d-5445c
。ご覧のとおり、フォルダの名前は、シリアル番号や、フォルダが生成された日付などで構成されています。
ある時点より前に生成されたフォルダーを削除したい場合、それらを見つけて削除するにはどうすればよいですか (
先週より前のフォルダー を削除するなど)。

ここで誰でもこれを手伝ってもらえますか?

4

2 に答える 2

0

これを行うのに役立つPythonモジュールがいくつかあり ます。os.walk(path)指定されたパス上のすべてのフォルダーを反復処理して os.path.getctime(fileName)、ファイルの作成日を返します。 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()

このコードは、ファイルの作成時間のみに基づいてフォルダを削除することに注意してください。ファイルの日付以外に、より多くのロジックが必要になる場合があります。

于 2013-03-11T14:56:01.693 に答える
0

a削除するフォルダーが直接またはにあると仮定します。b
のコードは、フォルダーごとに日時オブジェクトを作成し、日付の差を使用して削除するフォルダーを決定します。

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)
于 2013-03-11T17:52:04.067 に答える