介紹:
- 使用python編寫一個(gè)自動(dòng)壓縮日志文件的腳本
相關(guān)技術(shù):
1.使用python os.listdir遍歷文件涵亏,不包含文件夾
2.使用python re正則表達(dá)式匹配日志文件
3.使用python tarfile模塊壓縮文件
注意:
請(qǐng)使用Linux的crontab使用宰睡,謝謝!
比如:
每天凌晨5點(diǎn)執(zhí)行腳本
0 5 * * * /usr/bin/python /opt/script/compressLogs.py(這個(gè)是我的腳本路徑)
效果圖:
請(qǐng)看源代碼气筋,如果覺(jué)得好拆内,還請(qǐng)給小編點(diǎn)贊下下哦!
#!/usr/bin python
# _*_ coding:utf-8 _*_
# Author: Gavin
# Version: 1.0
# CreateTime: 2018-09-04
# ScriptName: compressLogs
# Description: 壓縮日志
# readme: logsPath請(qǐng)賦予相應(yīng)的值
import os
import datetime
import re
import tarfile
# 獲取文件路徑集合
def getFile(logsPath):
logsFile = []
fileList = os.listdir(logsPath)
for fileName in fileList:
path = os.path.join(logsPath, fileName)
# 過(guò)濾子文件的文件被壓縮
if os.path.isdir(path):
continue
logsFile.append(path)
return logsFile
# 檢查文件,備份文件
def checkFile(logsFiles):
newDate = datetime.datetime.now().strftime('%Y-%m-%d') # 當(dāng)前時(shí)間
for f in logsFiles:
# 過(guò)濾壓縮文件檢查
if f.endswith(".tar.gz"):
continue
# 使用正則獲取日志文件名的時(shí)間
mat = re.search(r"(\d{4}-\d{1,2}-\d{1,2})", f)
if bool(mat):
delta = datetime.datetime.strptime(newDate, '%Y-%m-%d') - datetime.datetime.strptime(mat.group(), '%Y-%m-%d')
# 當(dāng)前時(shí)間 - 文件時(shí)間 :大于0
if delta.days > 0:
# 已經(jīng)壓縮完成的日志文件,刪除原日志文件,保留壓縮文件
for apath in logsFiles:
if apath.endswith(".tar.gz") and apath.endswith("%s.tar.gz" % mat.group()):
os.remove(apath)
break
# 沒(méi)有壓縮的文件,壓縮后,刪除原文件
tar = tarfile.open("%s.tar.gz" % f[0: -4], "w:gz")
tar.add(f)
tar.close()
os.remove(f)
if __name__ == "__main__":
# 請(qǐng)修改日志路徑,注意路徑一定要完整,后面要使用str切割,不要省略路徑某位的/
# windows: F://application_logs// linux: /opt/applog/
logsPath = "F://application_logs//"
logsFiles = getFile(logsPath)
checkFile(logsFiles)