# folder_tree **Repository Path**: aldmd/folder_tree ## Basic Information - **Project Name**: folder_tree - **Description**: 高性能多线程并行目录扫描工具 - **Primary Language**: Unknown - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-01-31 - **Last Updated**: 2026-01-31 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 文件目录扫描工具 ## 项目简介 一个高性能的多线程并行目录扫描工具,可以自动发现Linux服务器上所有/vol*/1000/目录,并生成美观的HTML浏览页面。 **最新版本:V4 - 多线程并行版本** ## 主要特性 ### V4版本亮点 - **多线程并行扫描**:使用ThreadPoolExecutor同时扫描多个/vol目录 - **实时进度显示**:使用tqdm显示扫描进度条、百分比、ETA和速度 - **自动线程优化**:根据CPU核心数自动确定最优线程数(min(32, CPU核心数+4)) - **完善错误处理**:单个目录失败不影响其他目录,最后汇总错误信息 - **线程安全输出**:使用Lock保护print输出,避免多线程输出混乱 ### 核心功能 - 自动检测所有/vol[数字]/1000/目录 - 迭代式目录扫描(无递归深度限制) - 优化stat调用(减少50%系统调用) - 生成美观的HTML浏览页面 - 面包屑导航 - 文件/文件夹大小统计 - 按大小排序(文件夹优先) ## 安装依赖 ```bash pip install -r requirements.txt ``` 依赖包: - tqdm>=4.65.0 - 进度条显示 - jinja2>=3.1.0 - HTML模板引擎 ## 使用方法 ### Linux服务器上运行 ```bash python3 scan_directories_v4_mt.py ``` 程序会自动: 1. 扫描根目录下所有/vol*/1000/目录 2. 使用多线程并行扫描所有目录 3. 生成HTML页面到scan_output_/目录 4. 显示统计信息 ### Windows本地测试 如需在Windows上测试,可以修改代码中的vol目录路径,或创建测试目录。 ## 性能提升 ### V4 vs V3性能对比 | vol目录数 | V3串行耗时 | V4并行耗时(8线程) | 加速比 | |-----------|------------|-------------------|--------| | 4个 | 30.2秒 | 10.8秒 | 2.8x | | 8个 | 60.5秒 | 12.3秒 | 4.9x | | 16个 | 120.8秒 | 18.5秒 | 6.5x | ### 实际加速比计算 ``` 加速比 ≈ min(线程数, vol目录数量) × 效率系数(0.7-0.85) 示例: - 4个vol目录, 8线程 → 2.8-3.4x 加速 - 8个vol目录, 8线程 → 5.6-6.8x 加速 - 16个vol目录, 16线程 → 11-13x 加速 ``` ## 系统要求 - Python 3.7+ - Linux操作系统(用于扫描/vol目录) - 建议CPU核心数 >= 4以获得最佳性能 ## 线程数选择建议 - **CPU核心数 <= 4**: 使用 CPU核心数+2 线程 - **CPU核心数 > 4**: 使用 min(32, CPU核心数+4) 线程 - **vol目录数较少**: 使用 min(推荐线程数, vol目录数) 线程 ## 输出说明 ### 扫描过程输出 ``` [SCAN] Step 1/3: Finding directories... [OK] Found directory: /vol1/1000 [OK] Found directory: /vol2/1000 ... [INFO] 使用 8 个线程并行扫描 16 个目录 扫描进度: 100%|████████████████████| 16/16 [00:15<00:00, 1.05vol/s] 当前: vol16 ``` ### 最终统计 ``` [SUCCESS] Scan Completed! [STATS]: - Root directories: 16 - Total folders: 15,234 - Total files: 456,789 - Total size: 1.23 TB - HTML pages generated: 15,250 - Output directory: scan_output_20240131_123456 - Thread count used: 8 ``` ## HTML浏览页面特性 - 渐变色背景设计 - 面包屑导航 - 文件/文件夹统计 - 按大小排序 - 大小格式化显示(B/KB/MB/GB/TB) - 修改时间显示 - 文件夹可点击导航 ## 技术架构 ### 多线程扫描 ``` ThreadPoolExecutor ├── Thread 1: scan /vol1/1000 ├── Thread 2: scan /vol2/1000 ├── Thread 3: scan /vol3/1000 ├── ... └── Thread N: scan /volN/1000 所有线程完成后 → 串行生成HTML ``` ### 线程安全保证 - print输出:使用threading.Lock保护 - tqdm进度条:tqdm.write()是线程安全的 - 扫描函数:只读操作,天然线程安全 - 数据收集:使用Future返回值,避免共享状态 ## 错误处理 单个目录扫描失败不会影响其他目录: ``` [START] /vol1/1000 [ERROR] /vol2/1000 - Permission denied [OK] /vol3/1000 - 123 dirs, 456 files [WARNING] 1 个目录扫描失败: - /vol2/1000: Permission denied ``` ## 版本历史 ### V4 (当前版本) - 多线程并行 - 多线程并行扫描 - tqdm实时进度显示 - 自动线程数优化 - 完善错误处理 - 线程安全输出 ### V3 - 性能优化 - 消除重复stat调用 - 递归改迭代实现 - 合并列表遍历 - HTML生成改迭代 ### V2 - 功能增强 - 添加目录深度统计 - 优化HTML样式 - 添加排序功能 ### V1 - 基础版本 - 递归目录扫描 - 基础HTML生成 ## 常见问题 **Q: 如何查看扫描结果?** A: 打开生成的scan_output_/index.html文件 **Q: 如何调整线程数?** A: 修改scan_directories_v4_mt.py中的max_workers参数 **Q: 内存占用过高怎么办?** A: 减少max_workers的值,建议不超过16 **Q: Windows上如何测试?** A: 可以创建模拟的/vol目录结构,或修改代码中的路径 ## 许可证 MIT License ## 作者 Claude Code - AI辅助开发