本文目录导读:

我来为您介绍几种清理下载目录垃圾的脚本方案。
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参数查看会删除什么 - 重要文件备份:确保重要文件已备份
- 自定义规则:根据需求修改保留天数和文件类型
- 测试环境测试:先在测试目录运行
这些脚本可以根据您的具体需求进行修改和扩展。
版权声明: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直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播
中超直播