本文目录导读:

Linux/Unix Shell 脚本
使用 find 命令(最常用)
#!/bin/bash
# 删除30天前的文件
find /path/to/files -type f -mtime +30 -delete
# 更安全的版本(先列出再删除)
find /path/to/files -type f -mtime +30 -exec rm {} \;
# 按分钟删除(例如删除10分钟前的文件)
find /path/to/files -type f -mmin +10 -delete
# 按小时删除
find /path/to/files -type f -mtime +2 -name "*.log" -delete
带日志记录和错误处理的完整脚本
#!/bin/bash
# 删除过期日志文件
LOG_DIR="/var/log/myapp"
DAYS=30
LOG_FILE="/var/log/cleanup.log"
# 检查目录是否存在
if [ ! -d "$LOG_DIR" ]; then
echo "[$(date)] 目录不存在: $LOG_DIR" >> $LOG_FILE
exit 1
fi
# 统计删除的文件
DELETED_COUNT=0
echo "[$(date)] 开始清理 $LOG_DIR 中 $DAYS 天前的文件" >> $LOG_FILE
# 查找并删除文件
while IFS= read -r file; do
rm "$file"
DELETED_COUNT=$((DELETED_COUNT + 1))
echo "[$(date)] 已删除: $file" >> $LOG_FILE
done < <(find $LOG_DIR -type f -mtime +$DAYS)
echo "[$(date)] 清理完成,共删除 $DELETED_COUNT 个文件" >> $LOG_FILE
Windows 批处理脚本
@echo off REM 删除30天前的文件 forfiles /p "C:\logs" /s /m *.log /d -30 /c "cmd /c del @path" REM 删除指定类型的文件 forfiles /p "C:\temp" /d -7 /c "cmd /c del @file" REM 递归删除子目录中的过期文件 forfiles /p "C:\backup" /s /d -90 /c "cmd /c del @path"
PowerShell 脚本
# 删除30天前的文件
$threshold = (Get-Date).AddDays(-30)
Get-ChildItem -Path "C:\logs" -Recurse |
Where-Object { $_.LastWriteTime -lt $threshold -and !$_.PSIsContainer } |
Remove-Item -Force
# 带日志的版本
$logFile = "C:\cleanup.log"
$deletedCount = 0
Get-ChildItem -Path "C:\logs" -File |
Where-Object { $_.LastWriteTime -lt $threshold } |
ForEach-Object {
Remove-Item $_.FullName -Force
$deletedCount++
Add-Content $logFile "$(Get-Date) - 已删除: $($_.FullName)"
}
Add-Content $logFile "$(Get-Date) - 共删除 $deletedCount 个文件"
Python 脚本(跨平台)
import os
import time
from pathlib import Path
import logging
# 配置日志
logging.basicConfig(filename='cleanup.log', level=logging.INFO)
def delete_old_files(directory, days, extensions=None):
"""
删除指定目录下超过指定天数的文件
Args:
directory: 目标目录
days: 过期天数
extensions: 文件扩展名列表(可选)
"""
cutoff_time = time.time() - days * 86400
deleted_count = 0
try:
for root, dirs, files in os.walk(directory):
for filename in files:
# 检查扩展名
if extensions and not any(filename.endswith(ext) for ext in extensions):
continue
file_path = os.path.join(root, filename)
try:
file_mtime = os.path.getmtime(file_path)
if file_mtime < cutoff_time:
os.remove(file_path)
deleted_count += 1
logging.info(f"已删除: {file_path}")
except OSError as e:
logging.error(f"删除失败 {file_path}: {e}")
except Exception as e:
logging.error(f"遍历目录错误: {e}")
logging.info(f"共删除 {deleted_count} 个文件")
return deleted_count
# 使用示例
if __name__ == "__main__":
# 删除30天前的日志文件
delete_old_files("/var/log/app", 30, ['.log'])
# 删除所有类型的过期文件
# delete_old_files("/tmp/old", 7)
定时执行方案
Linux crontab
# 每天凌晨2点执行清理 0 2 * * * /usr/local/bin/cleanup.sh # 每周日执行 0 2 * * 0 /usr/local/bin/cleanup.sh
Windows 计划任务
# 创建计划任务 $action = New-ScheduledTaskAction -Execute "powershell.exe" -Argument "C:\scripts\cleanup.ps1" $trigger = New-ScheduledTaskTrigger -Daily -At "02:00" Register-ScheduledTask -TaskName "CleanupOldFiles" -Action $action -Trigger $trigger
使用建议
- 先测试:正式运行前先用
-whatif或打印模式测试 - 备份重要:对重要目录建议先备份
- 日志记录:保留操作日志便于追踪
- 权限管理:确保脚本有适当的执行权限
- 安全网:可以先将文件移动到回收站/备份目录而不是直接删除
选择哪种脚本取决于你的操作系统和具体需求,建议先用 echo 或 -whatif 参数测试,确认无误后再正式执行。
版权声明:NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
足球直播
足球直播
足球直播
篮球直播
篮球直播
篮球直播
NBA直播
NBA直播
NBA直播
CBA直播
CBA直播
CBA直播
亚冠直播
亚冠直播
亚冠直播
欧冠直播
欧冠直播
欧冠直播
英超直播
英超直播
英超直播
西甲直播
西甲直播
西甲直播
中超直播
中超直播
中超直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
曼联直播
曼联直播
曼联直播
日职联直播
日职联直播
日职联直播
澳超直播
澳超直播
澳超直播
阿森纳直播
阿森纳直播
阿森纳直播
足球直播
足球直播
足球直播
NBA直播
NBA直播
NBA直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
欧冠直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
足球直播
足球直播
足球直播
足球直播
足球直播
英超直播
英超直播
英超直播
英超直播
英超直播
篮球直播
篮球直播
篮球直播
篮球直播
篮球直播
CBA直播
CBA直播
CBA直播
CBA直播
CBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
NBA直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播