Python脚本如何移动7天以上旧文件且保留指定数量最新文件
Python文件清理脚本修改方案
你可以通过Python列表切片特性实现跳过前N个最新文件的需求,修改方案如下:
修改后的完整代码
#!/usr/bin/python import os import re import time import shutil # 定义需要保留的最新文件数量,可按需调整 KEEP_LATEST_COUNT = 5 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) # 按ctime倒序排列,最新的文件排在最前 outputlist.sort(key=os.path.getctime, reverse=True) # 切片跳过前KEEP_LATEST_COUNT个文件,仅移动剩余文件 for xfiles in outputlist[KEEP_LATEST_COUNT:]: shutil.move(xfiles, '/opt/backup')
核心修改说明
- 新增了常量
KEEP_LATEST_COUNT,你可以根据实际保留需求调整该数值 - 遍历文件列表时使用切片
outputlist[KEEP_LATEST_COUNT:],自动跳过列表前N个最新的文件:当符合移动条件的文件总数小于等于保留数量时,切片会返回空列表,不会执行任何移动操作,无需额外做边界判断
额外注意事项
如果/opt/backup目录下存在同名文件,shutil.move会直接覆盖目标路径文件,如果你需要避免覆盖,可以在移动前判断目标路径是否存在,对要移动的文件做重命名处理。
内容的提问来源于stack exchange,提问作者danidar
相关产品推荐
相关产品推荐

