# rnf **Repository Path**: ranmin69/rnf ## Basic Information - **Project Name**: rnf - **Description**: 基于 deno 的,批量重命名工具。 - **Primary Language**: Unknown - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2026-11-05 - **Last Updated**: 2026-11-06 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # Rename 一个用于批量重命名文件的命令行工具,基于 Deno 构建,支持多种排序策略,自动避免文件名冲突。执行前会先预览所有更改并要求二次确认,安全可靠。 ## 安装 ```shell deno install --allow-read --allow-write -n rename bitch.ts ``` ### 更新(重新安装) ```shell deno install -f --allow-read --allow-write -n rename bitch.ts ``` --- ## 基本用法 > **⚠️ 在目标文件所在的目录下运行命令。** | 参数 | 说明 | 必填 | 默认值 | |------|------|:----:|--------| | `--name` | 重命名后的基础文件名(不含序号和扩展名) | ✅ | "" | | `--start` | 序号起始数字,文件名从该数字开始递增 | ❌ | `1` | | `--sort` | 排序方式,决定文件处理顺序(见下方) | ❌ | `""` | | `--ext` | 保留扩展名的段数,`2` 可完整保留 `.tar.gz`(见下方) | ❌ | `1` | | `--dry-run` | 仅预览重命名结果,不实际执行(试运行) | ❌ | `false` | | `-v` / `--version` | 显示当前版本号 | ❌ | - | | `-h` / `--help` | 显示帮助信息 | ❌ | - | ```shell rename --start 69 --name 100097210_p --sort 'bt-desc' ``` > **提示**:直接运行 `rename`(不带任何参数),或加上 `-h` / `--help`,都会在命令行输出完整帮助信息。 ### 查看版本 ```shell rename --version ``` 输出: ```text Rename v0.4.0 ``` ### 执行流程(预览 + 确认) 正式执行(默认,不加 `--dry-run`)时,命令会**先列出所有文件重命名前后的对比**,等你确认后再真正执行: ```text 重命名预览: 📄:a.jpg => photo1.jpeg 📄:b.jpg => photo2.jpeg 确认以上 2 个文件无误后,按 Enter 键开始重命名(Ctrl+C 取消): ``` - 按 **Enter**:确认并执行重命名 - 按 **Ctrl+C**:取消操作,不做任何更改 ### 预览模式(仅查看,不执行) 若只想查看重命名结果、完全跳过确认与执行,加上 `--dry-run`: ```shell rename --start 1 --name photo --sort 'bt-asc' --dry-run ``` ### 自动跳过的文件 以下文件**不会**参与重命名: | 类型 | 判定规则 | 示例 | |------|----------|------| | 点文件 | 文件名以 `.` 开头 | `.gitignore`、`.env`、`.config.json` | | 无扩展名文件 | 文件名不含 `.` | `LICENSE`、`Makefile`、`README` | | 空扩展名文件 | 文件名以 `.` 结尾 | `notes.` | | 子目录 | 不是普通文件 | `src/`、`module/` | 被跳过的点文件与无扩展名文件会在运行时以灰色提示列出(子目录为静默跳过,不在此提示中): ```text 已跳过 2 个文件(点文件/无扩展名):.gitignore、LICENSE ``` > **说明**:`.config.json` 这类以 `.` 开头的文件,即便本身带有扩展名,也按点文件处理,同样会被跳过。 --- ## 排序方式 排序决定文件被重命名的顺序——排在前面的文件获得更小的序号。 ### 排序类型 | 排序值 | 说明 | |--------|------| | `bt-asc` | 按**创建时间**升序(最早创建的排最前) | | `bt-desc` | 按**创建时间**降序(最晚创建的排最前) | | `mt-asc` | 按**修改时间**升序(最早修改的排最前) | | `mt-desc` | 按**修改时间**降序(最晚修改的排最前) | | `at-asc` | 按**访问时间**升序(最早访问的排最前) | | `at-desc` | 按**访问时间**降序(最晚访问的排最前) | | `n-asc` | 按**文件名数字**升序(数字小的排最前) | | `n-desc` | 按**文件名数字**降序(数字大的排最前) | | `""`(不传) | 不排序,保持文件系统读取顺序 | ### 命名规则 排序值 = **前缀** + `-` + **方向**: - **前缀** - `bt` = Birth Time(创建时间) - `mt` = Modify Time(修改时间) - `at` = Access Time(访问时间) - `n` = Name(文件名数字部分) - **方向** - `asc` = 升序(从小到大) - `desc` = 降序(从大到小) ### 排序示例 假设文件夹中有以下图片: ``` a.jpg → 创建于 10:00 b.jpg → 创建于 08:00 c.jpg → 创建于 12:00 ``` ```shell rename --name photo --start 1 --sort 'bt-asc' ``` 按创建时间升序排列:`b(08:00) → a(10:00) → c(12:00)` ``` b.jpg → photo1.jpeg a.jpg → photo2.jpeg c.jpg → photo3.jpeg ``` --- ## 多段扩展名(--ext) 对于 `.tar.gz`、`.tar.bz2`、`.min.js` 这类**多段扩展名**文件,默认(`--ext 1`)只保留最后一段,中间段会被当作基础名的一部分而在重命名时丢失: | 原文件名 | `--ext 1`(默认) | `--ext 2` | |----------|------------------|-----------| | `backup.tar.gz` | `xxx1.gz`(丢失 `.tar`) | `xxx1.tar.gz`(完整保留) | | `app.min.js` | `xxx2.js`(丢失 `.min`) | `xxx2.min.js`(完整保留) | 用 `--ext` 指定要保留的扩展名段数即可完整保留: ```shell rename --name backup --ext 2 ``` > **说明**:段数上限为文件名实际段数减一,确保基础名至少保留一段;非法值(非数字或小于 1)自动兜底为 `1`。 --- ## 注意事项 - 正式执行前会先预览全部更改,需按 **Enter** 确认后才真正重命名,**Ctrl+C** 可随时取消 - 只处理**文件**,子目录自动跳过 - **点文件**(以 `.` 开头)与**无扩展名文件**自动跳过,不参与重命名,详见[自动跳过的文件](#自动跳过的文件) - `.jpg` 扩展名自动转为 `.jpeg` - **多段扩展名**(如 `.tar.gz`、`.min.js`)默认只保留最后一段,用 `--ext 2` 可完整保留,详见[多段扩展名](#多段扩展名--ext) - 采用两阶段重命名(先改临时名,再改最终名),不会出现新文件名覆盖旧文件的问题