本文目录导读:

我来为您介绍几种清理下载目录垃圾的脚本方案。
Python脚本(推荐)
#!/usr/bin/env python3
"""
下载目录清理脚本
功能:删除过期文件、特定类型垃圾文件、空文件夹
"""
import os
import time
import shutil
from pathlib import Path
import logging
# 配置日志
logging.basicConfig(level=logging.INFO, format='%(asctime)s - %(levelname)s - %(message)s')
class DownloadCleaner:
def __init__(self, download_path=None, days_threshold=30):
self.download_path = download_path or str(Path.home() / "Downloads")
self.days_threshold = days_threshold
# 要删除的文件后缀
self.trash_extensions = {
'.tmp', '.temp', '.log', '.cache', '.dmp',
'.part', '.crdownload', '.bak', '.swp'
}
# 要删除的文件名模式
self.trash_patterns = [
'*.tmp', '*.temp', '*.log', '*.dmp',
'*.crdownload', '*.part'
]
def clean_by_age(self):
"""清理超过指定天数的文件"""
now = time.time()
cutoff = now - (self.days_threshold * 86400)
for item in Path(self.download_path).iterdir():
if item.is_file():
if item.stat().st_mtime < cutoff:
try:
item.unlink()
logging.info(f"已删除过期文件: {item.name}")
except Exception as e:
logging.error(f"删除失败 {item.name}: {e}")
def clean_trash_files(self):
"""清理垃圾文件"""
for ext in self.trash_extensions:
for file in Path(self.download_path).glob(f"*{ext}"):
try:
file.unlink()
logging.info(f"已清理垃圾文件: {file.name}")
except Exception as e:
logging.error(f"清理失败 {file.name}: {e}")
def clean_empty_folders(self):
"""清理空文件夹"""
for folder in Path(self.download_path).iterdir():
if folder.is_dir() and not any(folder.iterdir()):
try:
folder.rmdir()
logging.info(f"已删除空文件夹: {folder.name}")
except Exception as e:
logging.error(f"删除失败 {folder.name}: {e}")
def analyze_space(self):
"""分析磁盘占用"""
total_size = 0
file_count = 0
for item in Path(self.download_path).rglob('*'):
if item.is_file():
total_size += item.stat().st_size
file_count += 1
return {
'file_count': file_count,
'total_size': total_size,
'total_size_mb': total_size / (1024 * 1024)
}
def run(self, preview=False):
"""执行清理"""
if preview:
logging.info("=== 预览模式 ===")
stats = self.analyze_space()
logging.info(f"下载目录: {self.download_path}")
logging.info(f"文件数量: {stats['file_count']}")
logging.info(f"总大小: {stats['total_size_mb']:.2f} MB")
else:
logging.info("开始清理...")
self.clean_trash_files()
self.clean_by_age()
self.clean_empty_folders()
logging.info("清理完成!")
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(description='下载目录清理工具')
parser.add_argument('--path', help='下载目录路径')
parser.add_argument('--days', type=int, default=30, help='文件保留天数')
parser.add_argument('--preview', action='store_true', help='预览模式')
parser.add_argument('--auto', action='store_true', help='自动清理(无需确认)')
args = parser.parse_args()
cleaner = DownloadCleaner(args.path, args.days)
if not args.auto and not args.preview:
print(f"将要清理: {cleaner.download_path}")
print(f"删除超过 {args.days} 天的文件")
confirm = input("确认执行? (y/n): ")
if confirm.lower() != 'y':
exit(0)
cleaner.run(preview=args.preview)
Windows批处理脚本
@echo off
chcp 65001 >nul下载目录清理工具
set DOWNLOAD_DIR=%USERPROFILE%\Downloads
set DAYS=30
set LOG_FILE=cleanup_log.txt
echo ========================================
echo 下载目录清理工具
echo ========================================
echo 目标目录: %DOWNLOAD_DIR%
echo 文件保留天数: %DAYS%
echo.
:: 预览模式
echo 正在分析目录...
dir /s %DOWNLOAD_DIR% > nul 2>&1
echo 目录大小:
powershell -Command "& {Get-ChildItem -Path '%DOWNLOAD_DIR%' -Recurse | Measure-Object -Property Length -Sum | Select-Object Sum}"
set /p confirm="确认开始清理? (Y/N): "
if /i not "%confirm%"=="Y" exit /b
echo 开始清理...
echo [%date% %time%] 开始清理 > %LOG_FILE%
:: 清理临时文件
echo 清理临时文件...
for %%f in (*.tmp *.temp *.log *.cache *.dmp *.part *.crdownload) do (
if exist "%DOWNLOAD_DIR%\%%f" (
del /q "%DOWNLOAD_DIR%\%%f"
echo 已删除: %%f >> %LOG_FILE%
)
)
:: 使用forfiles删除过期文件
echo 删除 %DAYS% 天前的文件...
forfiles /p "%DOWNLOAD_DIR%" /s /m *.* /d -%DAYS% /c "cmd /c del /q @path && echo @path >> %LOG_FILE%" 2>nul
:: 清理空文件夹
echo 清理空文件夹...
for /f "delims=" %%d in ('dir /ad /b /s "%DOWNLOAD_DIR%" ^| sort /r') do (
dir /a /b "%%d" 2>nul | findstr "^" >nul || (
rd "%%d" && echo 已删除空文件夹: %%d >> %LOG_FILE%
)
)
echo.
echo 清理完成!
echo 详细日志已保存到: %LOG_FILE%
pause
Linux/Mac Shell脚本
#!/bin/bash
# 下载目录清理脚本
DOWNLOAD_DIR="${HOME}/Downloads"
DAYS=30
LOG_FILE="/tmp/download_cleanup.log"
# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
echo -e "${YELLOW}========================================${NC}"
echo -e "${YELLOW} 下载目录清理工具${NC}"
echo -e "${YELLOW}========================================${NC}"
echo "目标目录: $DOWNLOAD_DIR"
echo "文件保留天数: $DAYS"
# 预览模式
echo -e "\n${GREEN}当前目录统计:${NC}"
echo "文件数量: $(find "$DOWNLOAD_DIR" -type f | wc -l)"
echo "目录大小: $(du -sh "$DOWNLOAD_DIR" | cut -f1)"
# 确认
read -p "确认开始清理? (y/n): " confirm
if [[ $confirm != [yY] ]]; then
exit 0
fi
# 开始清理
echo -e "\n${GREEN}开始清理...${NC}"
echo "[$(date)] 开始清理" > "$LOG_FILE"
# 清理临时文件
clean_temp_files() {
echo -e "${YELLOW}清理临时文件...${NC}"
find "$DOWNLOAD_DIR" -maxdepth 1 -type f \( \
-name "*.tmp" -o \
-name "*.temp" -o \
-name "*.log" -o \
-name "*.cache" -o \
-name "*.dmp" -o \
-name "*.part" -o \
-name "*.crdownload" \
\) -delete -print >> "$LOG_FILE"
}
# 清理过期文件
clean_old_files() {
echo -e "${YELLOW}清理超过${DAYS}天的文件...${NC}"
find "$DOWNLOAD_DIR" -maxdepth 1 -type f -mtime +$DAYS -delete -print >> "$LOG_FILE"
}
# 清理空文件夹
clean_empty_dirs() {
echo -e "${YELLOW}清理空文件夹...${NC}"
find "$DOWNLOAD_DIR" -mindepth 1 -type d -empty -delete -print >> "$LOG_FILE"
}
# 执行清理
clean_temp_files
clean_old_files
clean_empty_dirs
echo -e "\n${GREEN}清理完成!${NC}"
echo "详细日志: $LOG_FILE"
# 显示清理后的状态
echo -e "\n${GREEN}清理后状态:${NC}"
echo "文件数量: $(find "$DOWNLOAD_DIR" -type f | wc -l)"
echo "目录大小: $(du -sh "$DOWNLOAD_DIR" | cut -f1)"
使用建议
配置定时任务
Windows (任务计划程序):
schtasks /create /tn "清理下载目录" /tr "python C:\scripts\clean_downloads.py" /sc weekly /d MON /st 09:00
Linux (crontab):
# 每周一早上9点执行 0 9 * * 1 /path/to/clean_downloads.sh
安全提醒
- 先预览再执行:使用
--preview参数查看会删除什么 - 重要文件备份:确保重要文件已备份
- 自定义规则:根据需求修改保留天数和文件类型
- 测试环境测试:先在测试目录运行
这些脚本可以根据您的具体需求进行修改和扩展。