Python移动超过7天的文件,但保留最新的文件



我需要找到超过7天的文件并移动它们,但确保我没有移动所有文件。因此,在磁盘上至少保留一定数量的文件(x个最近的文件)。(即使超过7天)

目的是保持目录干净,但总是有一个最近的备份可用,以防需要快速回滚。

我已经用它来查找和排序文件。

#!/usr/bin/python
import os
import re
import time
import shutil
now = time.time()
outputlist = []
regexp='sudoers.(?!rpm).*'
regex = re.compile(regexp)
dir = '/etc'
filenames = os.listdir(dir)
for filename in filenames:
abspath = os.path.join(dir, filename)
if regex.findall(abspath):
if os.path.isfile(abspath):
if os.path.getctime(abspath) < now - 7 * 86400:
print (abspath, os.path.getctime(abspath))
outputlist.append(abspath)
outputlist.sort(key=os.path.getctime, reverse=True)
for xfiles in outputlist:
shutil.move(xfiles, '/opt/backup')

输出列表通常按ctime反向排序,即最新文件优先。我如何跳过列表的第一个"x"元素并从x+1元素移动?在我上面的例子中,它删除了所有超过7天的文件,我想跳过每个实例中找到的5个最新文件,并且不删除它们。

下面是我将如何做的一个例子。

from re import match
from os import listdir, remove
from os.path import getctime, isfile
from datetime import timedelta, datetime as dt
def time_validator(days):
delta = dt.now() - timedelta(days)
return lambda x: dt.fromtimestamp(getctime(x)) > delta
def files_to_remove(n):
validate = time_validator(7)
files = sorted([
y for x in listdir('/etc')
if isfile((y := f'/etc/{x}'))
and validate(y)
and match('sudoers.(?!rpm).*', y)
], key=lambda x: getctime(x))
return files[-n:] if len(files) > 20 else []
def remove_files(files):
for file in files: remove(file)
if __name__ == '__main__':
remove_files(files_to_remove(10))

我想跳过每个实例找到的5个最新文件,不删除它们

for filename in filenames[5:]:

相关内容

最新更新