《Python 自动清理磁盘实战:可配置、可回滚的文件清理脚本与最佳实践》

《Python 自动清理磁盘实战:可配置、可回滚的文件清理脚本与最佳实践》


开篇引入:为什么需要自动清理脚本

每个开发者或运维人员都遇到过这样的痛——磁盘不知不觉被日志、临时文件、旧备份、缓存填满,系统告警、CI 失败、甚至生产服务中断。手工清理不可靠且容易误删;完全交给系统工具又缺乏可控性和可审计性。

本文以多年实践为基础,带你用 Python 从 0 到 1 构建一个“稳健、可配置、可回滚、可测试”的磁盘清理脚本,覆盖设计思路、核心代码、测试、部署(cron / systemd)与运维建议。读完你会知道如何在保证安全性的前提下,自动释放磁盘空间并将操作可视化。


1 设计原则(先看原则再写代码)

  • 安全第一:默认 --dry-run,不直接删除;所有删除放入回收/隔离目录并保留一定期限后再真正删除。
  • 可配置:用配置文件控制路径、保留策略、大小/时间阈值、白名单/黑名单。
  • 可审计:记录日志(操作前/后)、保存删除列表与哈希(用于回滚/追踪)。
  • 幂等与可重入:重复运行不会造成不可预期后果。
  • 易扩展:插件式策略(按年龄、大小、扩展名、正则等)。
  • 跨平台(尽量):优先使用 pathlib、避免平台专有依赖,必要时附加平台分支。

2 核心脚本(示例实现)

下面给出一个从扫描、筛选、移动到隔离、日志记录与通知的完整脚本骨架。请在生产环境前充分测试——我也会在下文给出测试与部署建议。

#!/usr/bin/env python3
"""
auto_clean.py
核心特性:
- 配置驱动(JSON/YAML)
- 策略:按年龄、按大小、按扩展名
- dry-run(默认)
- move 到 quarantine 目录(可回滚)
- 日志记录与可选 webhook 通知
"""

import argparse
import json
import logging
import shutil
import time
from pathlib import Path
from datetime import datetime, timedelta
import hashlib
import os

# ---------- 配置默认值 ----------
DEFAULT_CONFIG = {
   
   
    "paths": ["/var/log", "/tmp"],
    "age_days": 30,
    "min_size_mb": 100,
    "extensions": [".log", ".tmp", ".bak"],
    "exclude_patterns": [],
    "quarantine": "/var/quarantine",
    "dry_run": True,
    "max_move_per_run": 1000,
    "notify": {
   
   "enabled": False, "webhook": ""},
    "retain_quarantine_days": 7
}

# ---------- 工具函数 ----------
def setup_logger(logfile="auto_clean.log"):
    logging.basicConfig(
        level=logging.INFO,
        format="%(asctime)s %(levelname)s %(message)s",
        handlers=[logging.FileHandler(logfile), logging.StreamHandler()]
    )

def load_config(path=None):
    if path:
        with open(path, "r", encoding="utf-8") as f:
            if path.endswith(".json"):
                return json.load(f)
            else:
                raise RuntimeError("仅支持 JSON 配置(示例)")
    return DEFAULT_CONFIG

def file_hash(path: Path):
    h = hashlib.<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

清水白石008

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值