《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.<

最低0.47元/天 解锁文章

2609

被折叠的 条评论
为什么被折叠?



