python刪除過期log檔案

2021-06-27 11:57:09 字數 2871 閱讀 9086

os.walk方法可以很方便的得到目錄下的所有檔案,會返回乙個三元的tupple(dirpath, dirnames, filenames),其中,dirpath是代表目錄的路徑,dirnames是乙個list,包含了dirpath下的所有子目錄的名字,filenames是乙個list,包含了非目錄的檔案,如果需要得到全路徑,需要使用os.path.join(dirpath,name).例如test目錄的結構為:

test------------file_c

|-----------dir_a1/file_a1

| |

| -------dir_a2/file_a2

|------------dir_b1/file_b1

那麼使用如下**:

import os

for i in os.walk('test'):

print i

結果為:

('test', ['dir_a1', 'dir_b1'], ['file_c1'])('test/dir_a1', ['dir_a2'], ['file_a1'])('test/dir_a1/dir_a2', , ['file_a2'])('test/dir_b1', , ['file_b1'])  

要得到帶路徑的檔案,則可以這樣操作:

for i in os.walk('test'):

#print i

for j in i[2]:

os.path.join(i[0],j)

結果為:

'test/file_c1'

'test/dir_a1/file_a1'

'test/dir_a1/dir_a2/file_a2'

'test/dir_b1/file_b1'

當然,也可以利用os.path.isdir判斷來遞迴操作得到目錄中的檔案:

def walk(dir):

ret =

dir = os.path.abspath(dir)

for file in [file for file in os.listdir(dir) if not file in [".",".."]]:

nfile = os.path.join(dir,file)

if os.path.isdir(nfile):

ret.extend( walk(nfile) )

else:

return ret

根據特定名稱的檔案以及檔案更改時間來判斷是否需要刪除,os.path.getmtime(file)來得到檔案最後改變的時間,

當然除了諸如「***" in file的方法來判斷檔名外

,也可以採用正規表示式的方法。

def shouldkeep(file):

if '.py' in file:

return true

elif '.conf' in file:

return true

elif 'current' in file:

return true

elif 'rtb' in file and datetime.datetime.fromtimestamp( os.path.getmtime(file) ) > datetime.datetime.now() - datetime.timedelta(3):

return true

# the log webdebug/popterr/webaccess/controller_slow/game/checking_social which are modified 6 day ago should be removed

elif datetime.datetime.fromtimestamp( os.path.getmtime(file) ) < \

datetime.datetime.now() - datetime.timedelta(6)\

and ('webdebug' in file \

or 'potperr' in file\

or 'webaccess' in file\

or 'controller_slow' in file\

or 'game.' in file\

or 'checkin_social' in file\

):return false

elif datetime.datetime.fromtimestamp( os.path.getmtime(file) ) < \

datetime.datetime.now() - datetime.timedelta(2)\

and ('queue.master.info' in file):

return false

elif datetime.datetime.fromtimestamp( os.path.getmtime(file) ) > \

datetime.datetime.now() - datetime.timedelta(6):

return true

else:

return false

files =  walk('/var/server/log')

for i in files:

if not shouldkeep(i):

print i, datetime.datetime.fromtimestamp( os.path.getmtime(i) )

os.remove( i )

將該指令碼用crontab定時每天執行一次,即可定期每天清理/var/server/log下的過期檔案。

linux刪除過期檔案

建立刪除檔案指令碼 bin sh 定義所刪除目錄路徑 location find location mtime 365 type f name jmhrms trc exec rm f 或者 bin sh find u01 oracle admin jmhrms bdump mtime 365 ty...

SQL刪除過期檔案

在sql server中,一般是用維護計畫實現刪除過期檔案。不過直接用指令碼也是可以的,而且更靈活。下面介紹三種方法。優點 相容性好 缺點 不能刪除sql server之外建立的檔案,包括rar 備註 維護計畫中的 清理維護 也是呼叫此 擴充套件儲存過程 來刪除檔案。declare olddate ...

linux刪除過期檔案

建立刪除檔案指令碼 bin sh 定義所刪除目錄路徑 location find location mtime 365 type f name jmhrms trc exec rm f 或者 bin sh find u01 oracle admin jmhrms bdump mtime 365 ty...