Skip to content

cmd - 批量修改文件名前缀

linux系统中rename命令的用法,用来修改文件名、重命名文件,批量重命名文件。

linux rename命令有两个版本,一个C语言版本,一个是Perl语言版本的,判断方式为:

运行man rename看到第一个行: - 看到RENAME(1) Linux Programmer’s Manual RENAME(1)的是C语言版本; - 看到RENAME(1) Perl Programmers Reference Guide RENAME(1)则是Perl版本的了。

::: tip 提示

两个版本的语法有所差别,这里介绍的是ubuntu 22.04用到的perl版本的。

:::

基本语法

rename 's/原前缀/新前缀/' *
  • s 表示替换操作
  • 原前缀 表示需要被替换的前缀
  • 新前缀 表示新的前缀
  • * 表示所有文件

例如: rename 's/old_/new_/' *

这条命令将当前目录下所有以 old_ 开头的文件名的前缀替换成 new_

::: warning 注意

  • 请注意,最好先在没有重要文件的测试目录中进行测试。因为 rename 命令执行后文件名更改是不可逆的。

  • 可以在rename后面加上-n参数预先预览,而不直接修改,可以防止改错了。

:::

全部文件改成小写

rename 'y/A-Z/a-z/' *

结合find命令一起使用

文件名修改已有的前缀

find . -name "match-pattern*.jpg" | xargs rename 's/old-prefix-/new-prefix-/'

# 通过find命令查找符合条件的文件,再通过管道修改原来的前缀

文件名前加上前缀

find . -name "*.png"  -exec rename -n 's/.\//.\/append-prefix-/' {} \;

# 通过find命令来查找符合png后缀的文件,再通过find的exec参数一一对应的执行rename命令追加前缀
# 去掉-n参数可以生效命名

OR

find . -name "*.png"  -exec rename --nopath -n 's//append-prefix-/' {} \; 

# 加上--nopath参数可以简化上面的正则表达式部分,nopath表示不匹配目录,只修改文件

以下是输出的结果:

rename(./double-wan-控制面板.png, ./append-prefix-double-wan-控制面板.png)
rename(./double-wan-自动跃点.png, ./append-prefix-double-wan-自动跃点.png)
rename(./router-table-iptable.png, ./append-prefix-router-table-iptable.png)