Linux下进行批量重命名

安装

Ubuntu

apt install rename

Arch

yay perl-rename
# OR
yaourt -S perl-rename

使用

rename [OPTIONS] perlexpr files

perlexprperl正则表达式

参数参数描述
-v--verbose打印成功重命名的文件名
-n--nono打印要重命名的文件名,但不进行处理。
-f--force允许覆盖现有文件
--path--fullpath重命名完整路径,包括任何目录组件
-d--filename, --nopath, --nofullpath不重命名目录,只重命名文件名部分
-m--man输出手册

示例

# 以下示例将所有扩展名为 .html 的文件更改为 .php:
rename 's/.html/.php/' *.html
rename -n 's/.html/.php/' *.html       # -n 输出并不执行
rename -f 's/.html/.php/' *.html      # -f 允许覆盖现有文件

# 用下划线替换文件名中的空格
rename 'y/ /\_/' *

# 将大写转换为小写
rename 'y/A-Z/a-z/' *

# 将文件名的左括号 ( 去掉
rename 's/^\(//' *

# 将十以内的数字前加上字符0
rename -v -n 's/^(\d)$/0$1/' *

正则格式

s/<pattern>/<replacement>/gi
tr/<pattern>/<replacement>/gi
y/<pattern>/<replacement>/gi

# g 全局(不带着个选项只匹配一次)
# i 不区分大小写

# s 替换
# tr or y 转化,原字符串和目标字符串逐字替换

CentOS

在CentOS上安装的uname是没有正则功能的,这个时候可以用vim这个工具进行代替

  1. 在要重命名的页面上打开一个空的vim
  2. 输入: 进入命令模式
  3. 输入命令 :read !ls。这个时候屏幕上应该出现这个目录下的所有文件的文件名,一行一个。
  4. 在命令模式输入 :%s#\(.*\)#mv \1 \1#g 将命令重命名为mv 命令。在这一步可以选择替换成想要的名字,也可以进入插入模式对单个的文件进行修改。
  5. 修改完成后,退出编辑模式回到正常模式,然后进入命令模式输入 :write !sh
  6. 然后退出vim就可以看到修改后的文件名了。