本文目录导读:

- Windows 环境(PowerShell / bat)
- Linux 环境(Bash)
- macOS 环境(Bash + osascript)
- 跨平台通用方案(Python)
- 通用安全准则与注意事项
- 自动化部署建议
Windows 环境(PowerShell / bat)
Windows 系统的临时文件主要分布在 %TEMP%、C:\Windows\Temp 以及部分软件缓存目录。
使用 PowerShell(推荐,更强大安全)
# 清理当前用户临时文件夹(%TEMP%)
$tempPaths = @(
"$env:TEMP",
"$env:WINDIR\Temp",
"$env:USERPROFILE\AppData\Local\Temp"
)
foreach ($path in $tempPaths) {
if (Test-Path $path) {
try {
# 删除文件(排除正在使用的)
Get-ChildItem -Path $path -Recurse -Force -ErrorAction SilentlyContinue |
Where-Object { !$_.PSIsContainer } |
Remove-Item -Force -ErrorAction SilentlyContinue
# 删除空目录
Get-ChildItem -Path $path -Recurse -Force -ErrorAction SilentlyContinue |
Where-Object { $_.PSIsContainer -and @(Get-ChildItem -LiteralPath $_.Fullname -Recurse -Force -ErrorAction SilentlyContinue | Where-Object { !$_.PSIsContainer }).Count -eq 0 } |
Remove-Item -Recurse -Force -ErrorAction SilentlyContinue
}
catch {
Write-Warning "清理 $path 时出错: $_"
}
}
}
Write-Host "临时文件清理完成(部分文件可能因占用而跳过)"
使用批处理脚本(传统方式)
@echo off echo 正在清理临时文件... :: 清理当前用户临时文件夹 del /f /s /q %TEMP%\*.* > nul 2>&1 for /d %%i in (%TEMP%\*) do rd /s /q "%%i" > nul 2>&1 :: 清理系统临时文件夹(需要管理员权限) del /f /s /q C:\Windows\Temp\*.* > nul 2>&1 for /d %%i in (C:\Windows\Temp\*) do rd /s /q "%%i" > nul 2>&1 :: 清理预取文件(谨慎,可选) del /f /s /q C:\Windows\Prefetch\*.* > nul 2>&1 echo 清理完成! pause
注意:批处理脚本中
del和rd的错误输出被重定向到nul,避免因文件占用而弹出错误信息。
清理其他常见系统残留(PowerShell)
# 清理 Windows 更新缓存(需要管理员权限)
if ([Security.Principal.WindowsIdentity]::GetCurrent().Groups -match "S-1-5-32-544") {
Write-Host "清理 Windows 更新缓存..."
Stop-Service -Name wuauserv -Force -ErrorAction SilentlyContinue
Remove-Item -Path "$env:WINDIR\SoftwareDistribution\Download\*" -Recurse -Force -ErrorAction SilentlyContinue
Start-Service -Name wuauserv -ErrorAction SilentlyContinue
} else {
Write-Warning "需要管理员权限才能清理 Windows 更新缓存。"
}
# 清理回收站(清空)
Clear-RecycleBin -Force -ErrorAction SilentlyContinue
Linux 环境(Bash)
Linux 的临时文件通常位于 /tmp、/var/tmp、用户家目录的 .cache 以及其他应用缓存。
通用临时文件清理脚本
#!/bin/bash
# 使用前请确认你有权限,建议以 root 或普通用户区分执行
echo "开始清理临时文件..."
# 1. 清理 /tmp(注意:不要删除 /tmp 本身!)
# 删除 7 天前的文件和目录(更安全的做法)
find /tmp -type f -atime +7 -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. 清理用户缓存(只能由对应用户执行,或以 root 身份遍历家目录)
# 如果以 root 运行,清理所有用户的 .cache 和 .thumbnails
if [ "$EUID" -eq 0 ]; then
echo "以 root 身份清理用户缓存..."
for user_home in /home/* /root; do
if [ -d "$user_home/.cache" ]; then
find "$user_home/.cache" -type f -atime +30 -delete 2>/dev/null
fi
if [ -d "$user_home/.thumbnails" ]; then
rm -rf "$user_home/.thumbnails/"* 2>/dev/null
fi
done
else
# 普通用户清理自己的
echo "清理当前用户的缓存..."
find ~/.cache -type f -atime +30 -delete 2>/dev/null
rm -rf ~/.thumbnails/* 2>/dev/null
fi
# 4. 清理 apt 缓存(Debian/Ubuntu)
if command -v apt &> /dev/null; then
echo "清理 APT 缓存..."
apt-get clean -y 2>/dev/null
fi
# 5. 清理 journal 日志(保留 100M)
if command -v journalctl &> /dev/null; then
echo "清理系统日志(保留 100M)..."
journalctl --vacuum-size=100M 2>/dev/null
fi
echo "清理完成!"
针对特定应用的清理
#!/bin/bash # 清理 Docker 相关临时文件(需要 docker 权限) echo "清理 Docker 系统资源..." docker system prune -f 2>/dev/null # 清理 pip 缓存 echo "清理 pip 缓存..." pip cache purge 2>/dev/null # 清理 npm 缓存 echo "清理 npm 缓存..." npm cache clean --force 2>/dev/null
macOS 环境(Bash + osascript)
macOS 基于 Unix,但部分目录受 SIP 保护。
#!/bin/bash
echo "开始清理 macOS 临时文件..."
# 1. 系统临时目录(/tmp 和 /var/tmp)
sudo find /tmp -type f -atime +7 -delete 2>/dev/null
sudo find /var/tmp -type f -atime +7 -delete 2>/dev/null
# 2. 用户缓存
find ~/Library/Caches -type f -atime +30 -delete 2>/dev/null
find ~/Library/Logs -type f -mtime +30 -delete 2>/dev/null
# 3. 清空废纸篓(需要用户确认)
osascript -e 'tell application "Finder" to empty trash'
# 4. 清理 Xcode 衍生数据(如果有)
if [ -d ~/Library/Developer/Xcode/DerivedData ]; then
echo "清理 Xcode 构建缓存..."
rm -rf ~/Library/Developer/Xcode/DerivedData/* 2>/dev/null
fi
# 5. 清理 Homebrew 缓存
if command -v brew &> /dev/null; then
echo "清理 Homebrew 缓存..."
brew cleanup --prune=all 2>/dev/null
fi
echo "清理结束!"
跨平台通用方案(Python)
如果你需要在多个系统上运行同样的逻辑,Python 是一个好的选择。
#!/usr/bin/env python3
import os
import sys
import shutil
import tempfile
from pathlib import Path
def clean_temp_dirs(dirs, days_old=7):
"""清理指定目录下超过 N 天的文件"""
import time
now = time.time()
limit = days_old * 86400 # 转换为秒
for dir_path in dirs:
if not Path(dir_path).exists():
continue
for root, dirs, files in os.walk(dir_path):
for name in files:
file_path = os.path.join(root, name)
try:
file_age = now - os.path.getatime(file_path)
if file_age > limit:
os.remove(file_path)
except Exception as e:
sys.stderr.write(f"跳过 {file_path}: {e}\n")
def main():
# 根据操作系统选择路径
if sys.platform == 'win32':
temp_dirs = [
os.environ.get('TEMP', ''),
os.path.join(os.environ.get('WINDIR', 'C:\\Windows'), 'Temp'),
os.path.join(os.environ.get('USERPROFILE', ''), 'AppData', 'Local', 'Temp')
]
elif sys.platform == 'darwin': # macOS
temp_dirs = [
'/tmp', '/var/tmp',
os.path.expanduser('~/Library/Caches'),
os.path.expanduser('~/Library/Logs')
]
else: # Linux
temp_dirs = ['/tmp', '/var/tmp', os.path.expanduser('~/.cache')]
# 过滤掉空路径
temp_dirs = [d for d in temp_dirs if d]
print(f"清理目录: {temp_dirs}")
clean_temp_dirs(temp_dirs, days_old=7)
print("清理完成!")
if __name__ == "__main__":
main()
通用安全准则与注意事项
-
不要直接删除目录本身
- 错误:
rm -rf /tmp会删除系统挂载点并导致程序崩溃。 - 正确:只删除
/tmp下的内容,如rm -rf /tmp/*(但注意隐藏文件)。
- 错误:
-
处理被占用的文件
- 文件正在被其他程序使用时无法删除,脚本应自动跳过(如
-ErrorAction SilentlyContinue/2>/dev/null)。
- 文件正在被其他程序使用时无法删除,脚本应自动跳过(如
-
考虑时间阈值
- 不要删除正在使用的临时文件,建议只删除 7 天 或 30 天 以上未访问的文件。
-
权限管理
- 系统临时目录(
C:\Windows\Temp、/tmp、/var/tmp)通常需要管理员或 root 权限,建议脚本检查权限或使用sudo。
- 系统临时目录(
-
测试先行
- 建议先用
echo模拟删除,或用find的-print选项预览将删的文件。
find /tmp -type f -atime +7 -print(查看文件列表,确认无误后再改为-delete)。
- 建议先用
自动化部署建议
- Windows:将 PowerShell 脚本保存为
.ps1,通过 任务计划程序 设置定期执行(如每周日)。 - Linux/macOS:将脚本保存为
.sh,使用chmod +x赋予可执行权限,通过 crontab 设置定时任务(如0 3 * * 0 /path/to/cleanup.sh)。 - 企业级:推荐使用配置管理工具(Ansible、Puppet、SCCM)统一分发和执行清理脚本。