批量重命名工具,用来基于特定规则批量对文件进行重命名。
- 可以通过配置文件简化常用操作
- 无法通过规则处理时可以名称映射
- 提供md5、拼音、时间等诸多变量
- 可使用过滤器对变量结果再次处理
- 可选择保存到其他目录而不是替换
# pnpm
pnpm add rename-tool -g
# npm
npm i rename-tool -g
# yarn
yarn add rename-tool global
提供了两个方法,rename 或 rename-tool ,作用是完全一样的,以下使用 renmae 举例。
rename [可选的输入配置] [可选的输出配置] [--config可选的使用配置文件]
举例说明:
rename
没有传递任何配置,会启用交互时操作,只适用于简单场景
rename "{pinyin}"
只传递一个配置,会当做输出配置。{pinyin}
是内置的变量,表示源文件名的汉语拼音,具体可参照下面的”变量“环节。这个例子表示把当前目录下的文件名都修改成对应的汉语拼音。
rename "./*.png" "{pinyin}"
当传递两个信息时,第一个会被当做输入配置,用于过滤文件,过滤写法可参照"过滤文件"环节。第二个会被当做输出配置。这个例子表示只修改当前目录下的.png文件,把文件名修改成对应的汉语拼音
rename "!./*.png" "{pinyin}"
只修改当前目录下除了.png以外的文件,把文件名修改成对应的汉语拼音,前面带英文感叹号 !
表示除此之外,过滤写法可参照"过滤文件"环节。
rename --config
根据配置文件的配置进行修改,默认配置文件是当前路径下的rename.config.json
,配置项提供的写法可参照”配置项“环节。
rename --config="a.json"
根据配置文件的配置进行修改,指定配置项文件是当前路径下的 a.json ,配置项提供的写法可参照”配置项“环节。
rename "{pinyin}" --config
根据配置文件的配置进行修改,除了输出的文件名,因为在命名行中传递了输入输出,优先级更高,输入配置会覆盖配置文件中的 input.glob 、输出配置会覆盖 output.filename 。
本项目使用 fast-glob
来查询和过滤文件,通过命令行使用时匹配模式只支持string,通过配置文件使用时能够传递string[]。下面介绍一些常见的用法,更多用法可参照 fast-glob 的文档。
- (*)- 匹配除斜线(路径分隔符)、隐藏文件(名称以.开头)之外的所有文件。
- (**) - 匹配零个或多个目录。
- (?) - 匹配除斜线(路径分隔符)以外的任何单个字符。
- ([seq])- 匹配序列中的任何字符。
只查询特定目录
"**" #当前目录下的所有文件(任何嵌套级别),这也是默认配置
"*" #当前目录下的所有文件
"src/*" #只查询src目录下的所有文件
"src/**" #只查询src目录的所有文件(任何嵌套级别)
"(src|bin)/**" #查询src和bin目录中的所有文件(任何嵌套级别)
"!(src|bin)/**" #查询除了src和bin中其他目录下的所有文件(任何嵌套级别)
"s*/*" #查询所有以s开头的子目录下的所有文件
"*s*/**|\!./node_modules/**" #所有名称中带s的文件和目录下的文件,除了node_modules目录中的文件
基于特定后缀
"*.png" #png后缀
"*.jpg" #png后缀
"*.{png,jpg}" #png和jpg后缀
基于特定前缀
"a*" #a开头的文件
"{b,p}*" #b开头或p开头的文件
"**/{b,p}*" #b开头或p开头的文件(任何嵌套级别)
排除特定文件
请通过配置项实现,可阅读『配置项』说明。
{i}
文件所在目录的修改序号,默认1开始,可以通过|传递起始数字。如{i|100}表示起始值从100开始。
{pinyin}
文件原名称的汉语拼音。
{szm}
文件原名称的汉语拼音首字母。
{name}
文件原名称。
{ext}
文件后缀格式,可能为空。
{filename}
等同于 {name}.{ext}
{md5}
文件的md5值。
{sha256}
文件的sha256值。
{date}
当前时间,默认是YYYY-MM-DD,可以通过过滤器传递时间格式,如{date|formate('YYYY')}
表示只要年份,传递的时间格式会基于dayjs格式化。
过滤器是对变量的一个补充,需要配合变量使用,能把变量的结果进行再次处理,通过竖线|
分割过滤器,如 {date|formate('yyyy-mm-dd')}
、 {name|replace(a,b)}
,括号内是传递给过滤器的传参,通过英文逗号分割,过滤器传递的内容引号可要可不要。
formate('yyyy-mm-dd')
格式化时间,配合date变量使用,把当前时间格式化为特定格式的,基于dayjs。
replace(a,b)
对变量内容进行替换,会把所有a替换为b,内部使用的是replaceAll这个方法。
padStart(10,0)
对变量内容的长度进行填充,如果内容长度小于10,在前面填充0,基于String.padStart。
padEnd(10,.)
对变量内容的长度进行填充,如果内容长度小于10,在后面填充.
,基于String.padEnd。
{
// 配置文件是json格式,使用时请删除注释
// 输入配置
"input": {
// 匹配规则,支持fast-glob复杂的string[]格式参数;
// 通过命令行传递两个参数时第一个参数会覆盖这里的值。
"glob": "**",
// 传递给fast-glob的配置项,默认情况下不需要使用。
// 这里不能传递 onlyFiles,absolute,caseSensitiveMatch,unique,objectMode 这些参数,因为程序依赖这些参数来做数据处理。
// fast-glob文档:https://www.npmjs.com/package/fast-glob#pattern-syntax
"fast-glob": {
// 忽略名单
"ignore": [".git/**", "node_modules/**"]
}
},
// 输出配置
"output": {
// 结果保存路径,默认是在当前目录直接重命名,需要时可以修改这里保存到其他目录
// 如改成 ../rename/ 就是保存到同级别的 rename 目录
"path": "./",
// 输出的文件名,通过命令行传递的配置会覆盖这里的值,能使用各种变量
"filename": "{pinyin}",
// 映射关系,这里的优先级最高,如果匹配到这里有对应关系,会忽略输出文件名的变量。
"mapping": {
// 举例说明,会把文件名是『素材_地球』的直接改成 earth
"素材_地球" : "earth",
// 举例说明,会把文件名是『首页banner』的直接改成 index_banner2
"首页banner" : "index_banner2"
}
}
}
程序对某些文件做了过滤,符合以下规则的不会被重命名。
- 所有 .config.ts 、.config.js 、config.json 、.config.json 结尾的文件。
- node_modules 文件夹、package.json、pnpm-lock.yaml 等前端开发常见配置文件。
- 如果你选择了启用配置项,你指定的配置文件也不会被重命名(该规则必须存在)。
- 如果你想取消这个规则,请通过自定义配置项的方式,填写 ignore 参数来覆盖默认参数。
非常欢迎你的加入!提一个 Issue 或者提交一个 Pull Request。
Pull Request:
- Fork 代码!
- 创建自己的分支:
git checkout -b feat/xxxx
- 提交你的修改:
git commit -am 'feat(function): add xxxxx'
- 推送您的分支:
git push origin feat/xxxx
- 提交
pull request
Git 贡献提交规范:
- 参考 vue 规范 (Angular)
feat
增加新功能fix
修复问题/BUGstyle
代码风格相关无影响运行结果的perf
优化/性能提升refactor
重构revert
撤销修改test
测试相关docs
文档/注释chore
依赖更新/脚手架配置修改等workflow
工作流改进ci
持续集成types
类型定义文件更改wip
开发中
如果你觉得这个项目帮助到了你,你可以帮作者买一杯果汁表示鼓励 🍹。