脚本怎样删除过期文件

wen 实用脚本 22

本文目录导读:

脚本怎样删除过期文件

  1. Windows 环境脚本
  2. Linux 环境脚本
  3. 高级功能脚本
  4. 使用建议
  5. 定时执行示例

我可以为您提供几种常用的删除过期文件的脚本方案,涵盖 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)

使用建议

  1. 先在测试环境运行:使用 -whatif (PowerShell) 或 -print (Linux) 参数预览
  2. 设置日志记录:记录删除操作便于审计
  3. 权限检查:确保脚本有足够权限
  4. 设置定时任务
    • 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

选择适合您环境的方案,记得先在非生产环境测试!

抱歉,评论功能暂时关闭!