npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2025 – Pkg Stats / Ryan Hefner

rename-tool

v1.1.1

Published

一个批量重命名的命令行工具

Downloads

6

Readme

rename-tool

批量重命名工具,用来基于特定规则批量对文件进行重命名。

特点

  • 可以通过配置文件简化常用操作
  • 无法通过规则处理时可以名称映射
  • 提供md5、拼音、时间等诸多变量
  • 可使用过滤器对变量结果再次处理
  • 可选择保存到其他目录而不是替换

安装

# npm
npm i rename-tool -g
# yarn 
yarn add rename-tool global
# pnpm
pnpm install rename-tool -g

使用

基础用法

提供了两个方法,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"
    }
  }
}

常见问题

1、为什么有些文件没有被重命名?

程序对某些文件做了过滤,符合以下规则的不会被重命名。

  • 所有 .config.ts 、.config.js 、config.json 、.config.json 结尾的文件。
  • node_modules 文件夹、package.json、pnpm-lock.yaml 等前端开发常见配置文件。
  • 如果你选择了启用配置项,你指定的配置文件也不会被重命名(该规则必须存在)。
  • 如果你想取消这个规则,请通过自定义配置项的方式,填写 ignore 参数来覆盖默认参数。

参与贡献

非常欢迎你的加入!提一个 Issue 或者提交一个 Pull Request。

Pull Request:

  1. Fork 代码!
  2. 创建自己的分支: git checkout -b feat/xxxx
  3. 提交你的修改: git commit -am 'feat(function): add xxxxx'
  4. 推送您的分支: git push origin feat/xxxx
  5. 提交pull request

Git 贡献提交规范:

  • 参考 vue 规范 (Angular)
    • feat 增加新功能
    • fix 修复问题/BUG
    • style 代码风格相关无影响运行结果的
    • perf 优化/性能提升
    • refactor 重构
    • revert 撤销修改
    • test 测试相关
    • docs 文档/注释
    • chore 依赖更新/脚手架配置修改等
    • workflow 工作流改进
    • ci 持续集成
    • types 类型定义文件更改
    • wip 开发中

打赏作者

如果你觉得这个项目帮助到了你,你可以帮作者买一杯果汁表示鼓励 🍹。

打赏