Thanks to visit codestin.com
Credit goes to lib.rs

#parallel-processing #data-processing #rf #rm #cross-platform

app rmrs

A Rust library for parallel processing and data processing

1 unstable release

Uses new Rust 2024

0.1.0 Sep 26, 2025

#1340 in Filesystem

MIT/Apache

15KB
202 lines

rmrs 🚀

一个用 Rust 编写的跨平台 rm -rf 替代品,支持并行删除和智能安全检查。

特性

  • 并行删除: 多线程并行处理,删除速度比传统 rm -rf 快 2-5 倍
  • 🛡️ 安全保护: 内置危险路径检测,防止意外删除系统关键目录
  • 📊 实时进度: 显示删除进度、速度统计和详细报告
  • 🎯 智能错误处理: 优雅处理各种错误情况,不会因单个文件失败而中断
  • 💾 内存高效: 流式处理大目录,不会消耗过多内存
  • 🔧 灵活配置: 可自定义线程数、强制模式、静默模式等选项

安装

从源码编译

# 克隆仓库
git clone https://github.com/your-username/rmrs.git
cd rmrs

# 编译发布版本
cargo build --release

# 安装到系统路径 (可选)
cargo install --path .

使用 Cargo 安装

cargo install rmrs

使用方法

基本用法

# 删除单个目录
rmrs ./temp/

# 删除多个路径
rmrs ./logs/ ./cache/ ./build/

# 显示帮助信息
rmrs --help

命令行选项

rmrs [选项] <路径>...

选项:
  -j, --jobs <num>     并行工作线程数 (默认: CPU核心数)
  -f, --force          强制删除,不进行安全检查
  -q, --quiet          静默模式,不显示进度
  -h, --help           显示帮助信息

使用示例

# 使用 8 个线程并行删除
rmrs -j 8 ./large_directory/

# 强制删除,跳过安全检查
rmrs --force /tmp/temp_files/

# 静默模式删除
rmrs --quiet ./build/ ./dist/

# 删除当前目录下的多个文件夹
rmrs node_modules/ target/ .next/

性能对比

在包含 100,000 个小文件的测试中的性能对比:

工具 时间 速度提升
rm -rf 45.2s -
rmrs (4线程) 18.3s 2.5x
rmrs (8线程) 12.1s 3.7x

测试环境: Intel i7-8700K, NVMe SSD, Linux 5.15

安全特性

内置保护

rmrs 会自动检测并阻止删除以下危险路径:

  • 系统关键目录: /, /bin, /boot, /dev, /etc, /lib, /proc, /root, /sbin, /sys, /usr, /var
  • 需要 root 权限的系统路径

安全删除策略

  1. 用户目录: 自动允许删除 $HOME 下的内容
  2. 当前目录: 自动允许删除当前工作目录下的内容
  3. 相对路径: 自动允许删除相对路径指定的内容
  4. 危险绝对路径: 需要用户明确确认

示例安全检查

# ✅ 安全 - 相对路径
rmrs ./temp/

# ✅ 安全 - 用户目录
rmrs ~/Downloads/old_files/

# ⚠️  需要确认 - 危险绝对路径
rmrs /opt/some_app/
# 输出: 警告: 要删除绝对路径 '/opt/some_app/', 确定吗? (y/N):

# ❌ 被阻止 - 系统目录
rmrs /etc/
# 输出: 操作已取消

技术细节

架构设计

  • 工作队列模式: 使用 crossbeam-channel 实现高效的任务分发
  • 原子操作统计: 使用 AtomicU64 进行无锁的统计信息收集
  • 递归扫描: 深度优先遍历目录结构,先删文件后删目录
  • 错误隔离: 单个文件删除失败不影响其他文件的处理

内存使用

  • 流式处理: 不会一次性将大目录的所有内容加载到内存
  • bounded channel: 限制内存中待处理任务的数量
  • 零拷贝: 尽可能避免不必要的数据复制

正常删除过程

开始删除 (使用 8 个工作线程)...
删除中... 文件: 15432, 目录: 892, 速度: 2847.3/s, 错误: 0

删除完成:
  文件: 15432
  目录: 892
  大小: 2847362048 bytes (2714.23 MB)
总耗时: 5.42

有错误的情况

[Worker 3] 删除文件失败 '/path/to/locked_file': Permission denied
删除中... 文件: 8234, 目录: 445, 速度: 1823.4/s, 错误: 3

删除完成:
  文件: 8234
  目录: 445
  大小: 1234567890 bytes (1177.38 MB)
  错误: 3
总耗时: 4.52

故障排除

常见问题

Q: 权限被拒绝错误

# 解决方案: 检查文件权限或使用 sudo
sudo rmrs ./protected_files/

Q: 设备忙或资源被占用

# 解决方案: 确保没有进程正在使用这些文件
lsof +D ./directory_to_delete/

Q: 删除速度没有明显提升

# 可能原因和解决方案:
# 1. 磁盘 I/O 成为瓶颈 - 无法通过软件优化
# 2. 文件数量较少 - 并行优势不明显
# 3. 网络文件系统 - 考虑减少线程数
rmrs -j 2 ./network_mounted_dir/

开发

构建要求

  • Rust 1.70.0 或更高版本
  • Cargo

开发命令

# 运行测试
cargo test

# 检查代码风格
cargo clippy

# 格式化代码  
cargo fmt

# 构建调试版本
cargo build

# 构建发布版本
cargo build --release

# 运行基准测试 (需要添加)
cargo bench

贡献指南

  1. Fork 本仓库
  2. 创建特性分支 (git checkout -b feature/amazing-feature)
  3. 提交更改 (git commit -m 'Add amazing feature')
  4. 推送到分支 (git push origin feature/amazing-feature)
  5. 开启 Pull Request

路线图

  • 配置文件支持: 支持 .rmrs.toml 配置文件
  • 模式匹配: 支持 glob 模式匹配 (rmrs "*.log")
  • 回收站模式: 可选的移动到回收站而非直接删除
  • 交互模式: 逐个确认删除每个文件/目录
  • 日志记录: 详细的操作日志记录功能
  • 恢复功能: 基于日志的删除恢复功能 (实验性)
  • 网络优化: 针对网络文件系统的优化
  • GUI 版本: 图形界面版本

许可证

本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。

致谢

  • crossbeam - 高性能并发原语
  • num_cpus - CPU 核心数检测
  • Rust 社区的优秀生态系统

Dependencies

~1.5MB
~30K SLoC