1 unstable release
Uses new Rust 2024
| 0.1.0 | Sep 26, 2025 |
|---|
#1340 in Filesystem
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 权限的系统路径
安全删除策略
- 用户目录: 自动允许删除
$HOME下的内容 - 当前目录: 自动允许删除当前工作目录下的内容
- 相对路径: 自动允许删除相对路径指定的内容
- 危险绝对路径: 需要用户明确确认
示例安全检查
# ✅ 安全 - 相对路径
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
贡献指南
- Fork 本仓库
- 创建特性分支 (
git checkout -b feature/amazing-feature) - 提交更改 (
git commit -m 'Add amazing feature') - 推送到分支 (
git push origin feature/amazing-feature) - 开启 Pull Request
路线图
- 配置文件支持: 支持
.rmrs.toml配置文件 - 模式匹配: 支持 glob 模式匹配 (
rmrs "*.log") - 回收站模式: 可选的移动到回收站而非直接删除
- 交互模式: 逐个确认删除每个文件/目录
- 日志记录: 详细的操作日志记录功能
- 恢复功能: 基于日志的删除恢复功能 (实验性)
- 网络优化: 针对网络文件系统的优化
- GUI 版本: 图形界面版本
许可证
本项目采用 MIT 许可证 - 查看 LICENSE 文件了解详情。
致谢
Dependencies
~1.5MB
~30K SLoC