Клевый скрипт. И он работает! Особенности:
1) ротация проходит по интервалу в днях,
2) в названии файлов используется год-месяц-день, то есть ротация по имени, а не по времени создания файла (хотя и это сделать можно)
3) для каждой папки надо создавать 3 записи в settings.ini: откуда, куда и маска файлов
4) в settings.ini используются названия fromN toN maskN, где N число
Вобщем вот пример settings.ini
[local]
logfile = Rotation.log
[copy]
dayinterval = 11
count = 3
from1 = D:\Router_xxx_xx_x_x\abonent\
to1 = K:\Router_xxx_xx_x_x\abonent\
mask1 = NF_%Y_%m_%d
from2 = D:\Router_xxx_xx_x_x\authorize\
to2 = K:\Router_xxx_xx_x_x\authorize\
mask2 = NF_%Y_%m_%d
from3 = D:\NAS_xxx-xx-xx-xx\
to3 = K:\NAS_xxx-xx-xx-xxx\
mask3 = %Y-%m-%d
В скрипте маленькая функция, которая архивирует файлики
### Archive and remove
def arch (filename, archivename, isrm):
if not os.path.exists (os.path.dirname (archivename)):
os.makedirs (os.path.dirname (archivename))
try:
os.chdir (os.path.dirname (archivename))
fout = gzip.open (os.path.basename(archivename), 'wb')
except IOError:
print ('Error creating archive file')
return
fin = open (filename, 'rb')
fout.writelines (fin)
fout.close()
fin.close()
if isrm:
os.remove (filename)
А вот сам скрипт
### MAIN
if __name__ == '__main__':
import gzip
import configparser
import time
import re
import os
from datetime import date
from datetime import timedelta
cfg = configparser.RawConfigParser()
cfg.read ('settings.ini')
logfile = open (cfg.get ('local', 'logfile'), 'a')
logfile.writelines (time.strftime
("\n[%Y-%m-%d %H:%M:%S] ") +'Service starts')
dayinterval = cfg.get ('copy', 'dayinterval')
date_from = date.today() - timedelta (days=int(dayinterval))
cnt = cfg.get ('copy', 'count')
i = 1
while i <= int(cnt) :
dir_from = cfg.get ('copy', 'from'+str(i))
dir_to = cfg.get ('copy', 'to'+str(i))+
date_from.strftime ("%Y-%m\\")
filemask = cfg.get ('copy', 'mask'+str(i))
datemask = date_from.strftime (filemask)
mask = re.compile (datemask, re.IGNORECASE)
flist = filter (mask.search, os.listdir(dir_from))
for f in flist:
logfile.writelines (time.strftime
("\n[%Y-%m-%d %H:%M:%S] ") + dir_from+f)
arch (dir_from+f, dir_to+f+'.gz',True)
i = i + 1
logfile.writelines (time.strftime
("\n[%Y-%m-%d %H:%M:%S] ") +'Service ends')
logfile.close()
UPD: приделал раскладывание файлов по месяцам.