自动化脚本如何清理临时目录

wen 实用脚本 2

本文目录导读:

自动化脚本如何清理临时目录

  1. Windows 平台
  2. Linux / macOS 平台
  3. 进阶方案:日志记录与邮件通知
  4. 安全建议(非常重要)

自动化清理临时目录的脚本,需要根据操作系统(Windows/Linux)和具体需求来设计,最核心的要点是:谨慎删除,注意安全,避免误删正在被使用的文件或系统关键文件。

以下是针对不同场景的脚本方案:

Windows 平台

Windows 的临时目录通常位于 %TEMP% (用户临时目录) 和 C:\Windows\Temp (系统临时目录)。

使用批处理脚本 (.bat)

这是最轻量、兼容性最好的方式。

@echo off
chcp 65001 >nul清理临时文件
echo 正在清理系统临时文件夹...
:: 清理当前用户的 Temp 文件夹
del /f /s /q %TEMP%\*.* >nul 2>&1
:: 删除空文件夹
for /d %%p in (%TEMP%\*) do rd /s /q "%%p" 2>nul
echo 正在清理系统全局临时文件夹 (需要管理员权限)...
:: 清理系统 Temp 文件夹 (需要以管理员身份运行)
del /f /s /q C:\Windows\Temp\*.* >nul 2>&1
for /d %%p in (C:\Windows\Temp\*) do rd /s /q "%%p" 2>nul
echo 正在清理 Prefetch (预读取文件)...
:: 清理 Prefetch (可选,建议有时间限制地清理)
del /f /s /q C:\Windows\Prefetch\*.* >nul 2>&1
echo 清理完成!
pause
  • /f:强制删除只读文件。
  • /s:从所有子目录删除。
  • /q:安静模式,删除时不询问。
  • >nul 2>&1:隐藏成功和错误信息。
  • for /d:循环删除空文件夹。
  • 注意:清理 C:\Windows\Prefetch 可能会影响下次开机速度,建议不要频繁清理。

使用 PowerShell 脚本 (.ps1)

功能更强大,支持更精细的筛选。

# 清理临时目录脚本 (PowerShell)
Write-Host "开始清理临时文件..." -ForegroundColor Green
# 1. 清理当前用户的 Temp 目录
$userTemp = [System.IO.Path]::GetTempPath()
Write-Host "正在清理用户临时目录: $userTemp" -ForegroundColor Yellow
Get-ChildItem -Path $userTemp -Recurse -Force -ErrorAction SilentlyContinue | 
    Where-Object { $_.PSIsContainer -or ($_.LastWriteTime -lt (Get-Date).AddDays(-1)) } | 
    Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
# 2. 清理 Windows 临时目录 (需要管理员权限)
$windowsTemp = "C:\Windows\Temp"
Write-Host "正在清理系统临时目录: $windowsTemp" -ForegroundColor Yellow
if (Test-Path $windowsTemp) {
    Get-ChildItem -Path $windowsTemp -Recurse -Force -ErrorAction SilentlyContinue | 
        Where-Object { $_.PSIsContainer -or ($_.LastWriteTime -lt (Get-Date).AddDays(-7)) } | 
        Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
}
# 3. 清理 Internet Explorer 缓存 (可选)
Write-Host "正在清理 IE 缓存..." -ForegroundColor Yellow
RunDll32.exe InetCpl.cpl,ClearMyTracksByProcess 8
Write-Host "临时文件清理完成!" -ForegroundColor Green
  • -ErrorAction SilentlyContinue:忽略权限不足或正在使用等错误。
  • -lt (Get-Date).AddDays(-N):只删除 N 天前的文件,避免误删正在使用的文件。

运行方式

  • 批处理:直接双击运行,或在计划任务中调用,清理系统临时目录需要右键“以管理员身份运行”。
  • PowerShell:右击 .ps1 文件选择“使用 PowerShell 运行”。

Linux / macOS 平台

Linux 系统的临时目录主要在 /tmp(重启后自动清理)、/var/tmp(重启后不清,仍需手动清理)。

经典的 Shell 脚本 (.sh)

#!/bin/bash
echo "开始清理临时文件..."
# 1. 清理 /tmp 目录下的文件 (保留当前正在使用的)
find /tmp -type f -atime +1 -delete 2>/dev/null
find /tmp -type d -empty -delete 2>/dev/null
# 2. 清理 /var/tmp 目录下的文件 (通常保留时间更长)
find /var/tmp -type f -atime +7 -delete 2>/dev/null
find /var/tmp -type d -empty -delete 2>/dev/null
# 3. 清理当前用户的缓存 (示例: apt 包管理器缓存)
if [ -d /var/cache/apt/archives ]; then
    echo "清理 apt 缓存..."
    apt-get clean 2>/dev/null
fi
# 4. 清理用户家目录下的 .cache 文件夹 (谨慎!)
# find ~/.cache -type f -atime +30 -delete 2>/dev/null
echo "清理完成!"
  • -atime +1:最后访问时间在 1 天前的文件(更安全,因为正在使用的文件会被频繁访问)。
  • -empty:只删除空目录。
  • 2>/dev/null:隐藏错误信息(如权限不足)。
  • 注意:删除 /tmp 下的文件使用 -atime 而不是 -mtime,因为很多临时文件被读取但未被修改。

优化版 Shell 脚本 (更安全)

#!/bin/bash
# 清理临时目录,排除正在使用或锁定的文件
TMP_DIRS=("/tmp" "/var/tmp" "/var/cache/apt/archives" "~/.cache")
echo "================================="
echo "  临时文件清理工具"
echo "================================="
for dir in "${TMP_DIRS[@]}"; do
    if [ -d "$dir" ]; then
        echo "正在清理: $dir"
        # 清理超过 7 天未访问的文件
        find "$dir" -type f -atime +7 -exec rm -f {} \; 2>/dev/null
        # 清理空目录
        find "$dir" -type d -empty -delete 2>/dev/null
    fi
done
echo "清理完毕!"

运行方式

# 赋予执行权限
chmod +x clean_temp.sh
# 以 root 权限运行 (部分目录需要)
sudo ./clean_temp.sh

进阶方案:日志记录与邮件通知

如果你需要在服务器上自动化运行,并记录清理结果:

#!/bin/bash
LOG_FILE="/var/log/clean_temp.log"
DATE=$(date '+%Y-%m-%d %H:%M:%S')
echo "[$DATE] 开始清理临时文件" >> $LOG_FILE
# 记录清理的文件数量
COUNT_BEFORE=$(find /tmp -type f | wc -l)
# 执行清理
find /tmp -type f -atime +1 -delete 2>/dev/null
find /tmp -type d -empty -delete 2>/dev/null
COUNT_AFTER=$(find /tmp -type f | wc -l)
DELETED=$((COUNT_BEFORE - COUNT_AFTER))
echo "[$DATE] 清理完成,共删除 $DELETED 个文件" >> $LOG_FILE
# 可选:发送邮件通知
# mail -s "临时文件清理报告" admin@example.com < $LOG_FILE

然后将脚本加入 crontab 中自动运行:

# 每天凌晨 2 点执行
0 2 * * * /path/to/clean_temp.sh

安全建议(非常重要)

无论使用哪种脚本,请务必遵守以下规则:

  1. 不要删除正在使用的文件
    • 使用 -atime(最后访问时间)或 -mtime(最后修改时间)来筛选。
    • 对于 Windows,不要清理 C:\Windows\Temp 中最近几分钟内修改的文件。
  2. 避免删除系统关键目录
    • Linux:绝对不要清理 /tmp 下的 .X11-unix.ICE-unix 等 socket 文件。
    • Windows:不要清理 C:\Windows\Prefetch 中频繁使用的 .pf 文件(除非你知道你在做什么)。
  3. 测试先行
    • 在生产环境运行前,先在测试机或虚拟机中运行。
    • 可以先使用 echo 命令代替 deleterm,查看将被删除的文件列表。
  4. 权限管理
    • Windows 清理系统临时目录需要管理员权限。
    • Linux 清理 /var/tmp 可能需要 sudo
  5. 不要清理用户目录下的关键临时文件

    如 Chrome/Edge 浏览器正在使用的临时文件,清理可能导致浏览器崩溃。

总结建议

  • Windows 用户:优先使用 批处理脚本 配合 系统任务计划程序 每月运行一次。
  • Linux 用户:使用 Shell 脚本 + crontab,频率建议设置为每周一次(凌晨低负载时段)。
  • 重要数据服务器:建议结合 监控系统日志记录,确保不误删业务相关临时文件。

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