# rust-windows-utils **Repository Path**: agstar/rust-windows-utils ## Basic Information - **Project Name**: rust-windows-utils - **Description**: No description available - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-04-04 - **Last Updated**: 2026-04-04 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Rust Utils - Windows上的Linux命令工具集 这是一个在Windows上使用的类似Linux命令的Rust工具集,包括`cp`、`mv`、`ll`、`grep`等常用命令。 ## 项目结构 ``` rust-utils/ ├── Cargo.toml # 项目配置,定义多个二进制目标 ├── src/ │ ├── lib.rs # 共享库入口 │ ├── utils/ # 通用工具模块 │ │ ├── mod.rs # 模块声明 │ │ ├── error.rs # 统一错误处理 │ │ └── fs.rs # 文件系统操作工具 │ └── bin/ # 各个命令的入口点 │ ├── cp.rs # 复制命令 │ ├── mv.rs # 移动/重命名命令 │ ├── ll.rs # 详细列表命令 │ └── grep.rs # 文本搜索命令 └── target/release/ # 编译输出目录 ├── cp.exe # 复制工具 ├── mv.exe # 移动工具 ├── ll.exe # 列表工具 └── grep.exe # 文本搜索工具 ``` ## 编译 ### 编译所有工具 ```bash cargo build --release ``` ### 编译单个工具 ```bash cargo build --release --bin cp cargo build --release --bin mv cargo build --release --bin ll ``` 编译后的可执行文件位于 `target/release/` 目录下。 ## 使用说明 ### cp - 复制文件和目录 **基本用法:** ```bash cp [选项] <源> <目标> cp [选项] <源>... <目录> ``` **选项:** - `-r, -R`: 递归复制目录 - `-v`: 显示详细信息(显示复制过程) - `-h, --help`: 显示帮助信息 **示例:** ```bash # 复制文件 cp file.txt backup.txt # 复制目录(需要 -r 选项) cp -r src/ backup/ # 复制多个文件到目录 cp file1.txt file2.txt dest_dir/ # 显示详细信息 cp -v -r project/ project_backup/ ``` ### mv - 移动/重命名文件 **基本用法:** ```bash mv [选项] <源> <目标> mv [选项] <源>... <目录> ``` **选项:** - `-v`: 显示详细信息 - `-h, --help`: 显示帮助信息 **示例:** ```bash # 重命名文件 mv old_name.txt new_name.txt # 移动文件到目录 mv file.txt dest_dir/ # 移动多个文件 mv file1.txt file2.txt dest_dir/ # 移动目录 mv old_dir/ new_location/ ``` ### ll - 详细列出文件 **基本用法:** ```bash ll [选项] [路径...] ``` **选项:** - `-a`: 显示所有文件(包括隐藏文件) - `-h`: 以人类可读的格式显示大小(KB, MB, GB等) - `--help`: 显示帮助信息 **示例:** ```bash # 列出当前目录 ll # 列出指定目录 ll src/ # 显示隐藏文件 ll -a # 人类可读的文件大小 ll -h # 多个目录 ll src/ target/ ``` **输出格式:** ``` drwxrwx 0B 2025-12-18 10:42:51 src -rwxrwx 312B 2025-12-18 10:44:47 Cargo.toml ``` 列: 1. 权限标识(d=目录,-=文件,r=读,w=写,x=执行) 2. 文件大小 3. 修改时间 4. 文件名(带颜色区分) **颜色说明:** `ll` 命令会根据文件类型自动为文件名添加颜色,便于快速识别: | 文件类型 | 颜色 | 说明 | |---------|------|------| | 目录 | **蓝色粗体** | 所有目录 | | 可执行文件 | **绿色粗体** | .exe, .bat, .cmd, .ps1(Windows)或具有执行权限的文件(Unix) | | 压缩文件 | 红色 | .zip, .tar, .gz, .7z, .rar等 | | 图片文件 | 紫色 | .jpg, .png, .gif, .svg, .bmp等 | | 视频文件 | 亮紫红色 | .mp4, .avi, .mkv, .mov等 | | 音频文件 | 亮青色 | .mp3, .wav, .flac, .aac等 | | 代码文件 | 黄色 | .rs, .py, .js, .java, .c, .cpp等 | | 文档文件 | 绿色 | .txt, .md, .pdf, .doc, .xls等 | | 隐藏文件 | 暗灰色 | 以.开头的文件 | | 普通文件 | 默认颜色 | 其他所有文件 | ### grep - 文本搜索 **基本用法:** ```bash grep [选项] <模式> [文件...] ``` **选项:** - `-i`: 忽略大小写 - `-n`: 显示匹配行号 - `-v`: 反向匹配(显示不匹配的行) - `-r, -R`: 递归搜索目录 - `-l`: 仅输出包含匹配的文件名 - `-c`: 仅输出匹配行数量 - `-h, --help`: 显示帮助信息 **示例:** ```bash # 搜索文件中的关键字 grep "TODO" README.md # 显示行号 grep -n "fn main" src/bin/ll.rs # 递归搜索目录并忽略大小写 grep -r -i "error" src/ ``` ## 安装到系统PATH 要在任何地方使用这些命令,可以将编译后的可执行文件添加到系统PATH: **方法1:复制到系统目录** ```bash # 复制到用户目录 mkdir -p ~/bin cp target/release/*.exe ~/bin/ # 将 ~/bin 添加到 PATH(在 .bashrc 或 .zshrc 中) export PATH="$HOME/bin:$PATH" ``` **方法2:使用符号链接** ```bash # 创建到系统目录的链接 ln -s "$(pwd)/target/release/cp.exe" /usr/local/bin/cp ln -s "$(pwd)/target/release/mv.exe" /usr/local/bin/mv ln -s "$(pwd)/target/release/ll.exe" /usr/local/bin/ll ``` **Windows系统路径:** 1. 复制 `target/release/*.exe` 到某个目录,如 `C:\tools\` 2. 将该目录添加到系统环境变量PATH中 ## 技术特性 ### 设计原则 - **SOLID原则**:模块化设计,单一职责 - **DRY原则**:共享工具库避免代码重复 - **KISS原则**:简洁直观的API设计 - **YAGNI原则**:只实现常用功能,避免过度设计 ### 架构亮点 1. **单项目多二进制**:所有工具共享一个代码库,但编译为独立的可执行文件 2. **共享库设计**:通用功能(错误处理、文件操作)在 `lib.rs` 中统一实现 3. **统一错误处理**:自定义 `UtilError` 类型提供一致的错误信息 4. **跨平台支持**:Windows和Unix系统上都能正常工作(权限显示有差异) ### 性能优化 - 使用 `--release` 模式编译,启用优化 - 文件移动优先使用系统重命名(最快),失败时才复制+删除 - 递归操作使用迭代器减少内存占用 ## 依赖 - `chrono`: 时间格式化(用于ll命令) - `colored`: 终端彩色输出(用于ll命令的文件类型着色) - `tempfile`: 测试工具(仅开发时) ## 开发和测试 ```bash # 运行测试 cargo test # 运行单元测试 cargo test --lib # 运行特定测试 cargo test --test fs_tests # 查看文档 cargo doc --open ``` ## 许可证 MIT ## 贡献 欢迎提交Issue和Pull Request!