本文目录导读:

我可以为您提供几种常用的删除过期文件的脚本方案,涵盖 Windows 和 Linux 环境。
Windows 环境脚本
使用 PowerShell 脚本
# 删除指定目录下30天前的文件
$daysOld = 30
$targetPath = "C:\Temp\"
# 获取并删除过期文件
Get-ChildItem -Path $targetPath -Recurse -File |
Where-Object { $_.LastWriteTime -lt (Get-Date).AddDays(-$daysOld) } |
Remove-Item -Force -Verbose
Write-Host "已删除 $daysOld 天前的文件"
使用批处理脚本 (cmd)
@echo off setlocal enabledelayedexpansion set "target_dir=C:\Temp" set "days_old=30" echo 正在删除 %target_dir% 中 %days_old% 天前的文件... forfiles -p "%target_dir%" -d -%days_old% -c "cmd /c del /q @path" echo 完成! pause
Linux 环境脚本
使用 find 命令
#!/bin/bash # 配置参数 TARGET_DIR="/tmp" DAYS_OLD=7 LOG_FILE="/var/log/cleanup.log" # 删除过期文件 find "$TARGET_DIR" -type f -mtime +$DAYS_OLD -delete 2>> "$LOG_FILE" # 输出结果 echo "$(date): 已删除 $TARGET_DIR 中 $DAYS_OLD 天前的文件" >> "$LOG_FILE"
更安全的版本(先检查再删除)
#!/bin/bash
TARGET_DIR="/var/log"
DAYS_OLD=30
DRY_RUN=true # 设为 false 执行实际删除
echo "检查要删除的文件($DAYS_OLD 天前):"
find "$TARGET_DIR" -type f -mtime +$DAYS_OLD -print
if [ "$DRY_RUN" = false ]; then
find "$TARGET_DIR" -type f -mtime +$DAYS_OLD -delete
echo "已执行删除操作"
else
echo "这是预览模式,未执行删除"
fi
高级功能脚本
支持多种条件的删除脚本
#!/usr/bin/env python3
# 跨平台版本
import os
import time
import argparse
from datetime import datetime, timedelta
def delete_old_files(path, days, extensions=None, dry_run=True):
"""删除指定目录下的过期文件"""
now = time.time()
cutoff = now - (days * 86400) # 天数转换为秒
deleted_count = 0
deleted_size = 0
for root, dirs, files in os.walk(path):
for file in files:
file_path = os.path.join(root, file)
# 检查文件扩展名
if extensions and not any(file.endswith(ext) for ext in extensions):
continue
try:
stat = os.stat(file_path)
file_time = stat.st_mtime # 或 stat.st_ctime
if file_time < cutoff:
file_size = stat.st_size
if dry_run:
print(f"[预览] 将删除: {file_path} ({file_size/1024:.1f} KB)")
else:
os.remove(file_path)
print(f"[已删除] {file_path}")
deleted_count += 1
deleted_size += file_size
except OSError as e:
print(f"错误: {file_path} - {e}")
print(f"\n总计: 删除 {deleted_count} 个文件, {deleted_size/1024/1024:.2f} MB")
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="删除过期文件")
parser.add_argument("path", help="目标目录")
parser.add_argument("--days", type=int, default=30, help="文件保留天数")
parser.add_argument("--ext", nargs="+", help="文件扩展名过滤器 (如 .log .txt)")
parser.add_argument("--execute", action="store_true", help="实际执行删除")
args = parser.parse_args()
delete_old_files(args.path, args.days, args.ext, not args.execute)
使用建议
- 先在测试环境运行:使用
-whatif(PowerShell) 或-print(Linux) 参数预览 - 设置日志记录:记录删除操作便于审计
- 权限检查:确保脚本有足够权限
- 设置定时任务:
- Windows: 任务计划程序
- Linux: crontab
定时执行示例
Linux crontab(每天凌晨2点执行)
0 2 * * * /path/to/cleanup.sh
Windows 任务计划程序
$action = New-ScheduledTaskAction -Execute "PowerShell.exe" -Argument "-File C:\Scripts\cleanup.ps1" $trigger = New-ScheduledTaskTrigger -Daily -At 2am Register-ScheduledTask -TaskName "FileCleanup" -Action $action -Trigger $trigger
选择适合您环境的方案,记得先在非生产环境测试!