这是一个使用 Rust 和 Tokio 编写的异步命令行工具,用于查找并删除项目中的 node_modules
目录。
- 异步搜索:使用广度优先搜索 (BFS) 高效地查找指定目录(默认为当前目录)及其子目录下的所有
node_modules
文件夹。 - 并发删除:一旦找到
node_modules
目录,立即启动一个异步任务来递归删除它。 - 并发限制:使用
tokio::sync::Semaphore
来限制同时进行的删除操作数量,防止系统资源(尤其是磁盘 I/O)过载。 - 效率:通过异步 I/O 和并发处理,旨在比同步脚本更快地完成清理任务。
- 程序启动后,从指定目录(默认是运行程序的当前目录)开始搜索。
- 一个异步任务 (
find_node_modules
) 负责广度优先搜索目录结构。 - 当搜索任务找到一个名为
node_modules
的目录时,它会将该目录的路径通过tokio::sync::mpsc
通道发送给主任务。 - 主任务从通道接收路径。
- 对于每个接收到的路径,主任务会尝试从
Semaphore
获取一个许可。如果当前并发删除任务的数量已达到限制,它会异步等待。 - 获取到许可后,主任务会生成一个新的异步任务 (
delete_directory_with_permit
) 来执行tokio::fs::remove_dir_all
以删除该node_modules
目录。 - 删除任务完成后,它持有的信号量许可会自动释放,允许其他等待的删除任务开始执行。
- 搜索任务和删除任务并行进行,直到搜索完成且所有删除任务都结束。
- 程序最后会报告成功删除的目录数量以及遇到的任何错误。
tokio
: 用于异步运行时、文件系统操作、任务管理、MPSC 通道和信号量。futures
: 用于处理join_all
等异步 Futures。
-
确保你已安装 Rust 和 Cargo。
-
克隆仓库或将
src/main.rs
和Cargo.toml
放在一个新项目的对应位置。 -
在项目根目录下打开终端。
-
运行构建命令:
cargo build --release
-
运行程序:
./target/release/clean # 在 Linux/macOS 上 # 或者 .\target\release\clean.exe # 在 Windows 上
或者直接使用
cargo run
进行编译和运行(非优化构建):cargo run
此工具会实际删除它找到的所有 node_modules
目录,并且此操作是不可逆的!
请在了解其工作方式并确定要在目标目录运行清理操作后,谨慎使用。 建议在不重要的项目或备份后进行测试。