7171

36 分钟

#Bash 的 file-rename 命令

file-rename [OPTION]... EXPRESSION FILE...

功能

通过表达式批量重命名文件。

类型

可执行文件(/usr/bin/file-rename)。

参数

  • OPTION 选项:
    • -v, --verbose - 打印成功重命名的文件
    • -0, --null - 从标准输入读取时使用空字符(\0)作为分隔符
    • -n, --nono - 不实际重命名文件,查看哪些文件将会被重命名
    • -f, --force - 运行覆盖现有文件
    • --path, --fullpath - 重命名整个路径
    • -d, --filename, --nopath, --nofullpath - 不要重命名中间目录,仅重命名路径的最后部分
    • -m, --man - 打印 MAN 文档
    • -u, --unicode [encoding] - 运行用户提供的代码时将文件名当作 Perl 字符串(Unicode);如果指定了 encoding,则用该编码对文件进行编解码
    • -e - 指定表达式 EXPRESSION
    • -E - 指定表达式 EXPRESSION ,以分号(;)结尾
    • -h, --help - 显示帮助
    • -V, --version - 显示版本
  • EXPRESSION - Perl 表达式
    • 变量 $_ 表示文件名
    • 变量 $1\1 表示正则的第一个捕获;以此类推
    • s/xxx/yyy/ 表示将 xxx 替换为 yyy
    • y/abc/xyz/ 表示将 abc 映射为 xyz
  • FILE - 要重命名的文件列表

#转换函数

函数作用示例
uc($str)全大写uc($1)
lc($str)全小写lc($1)
ucfirst($str)首字母大写ucfirst($1)
lcfirst($str)首字母小写lcfirst($1)

#正则内的转换

转换语法作用示例
全字符大写\U把后续字符转大写s/^(\w)/\U$1/file.txtFILE.TXT
全字符小写\L把后续字符转小写s/^(\w)/\L$1/FILE.TXTfile.txt
单字符大写\u只把下一个字符转大写s/^(\w)/\u$1/file.txtFile.txt
单字符小写\l只把下一个字符转小写s/^(\w)/\l$1/File.txtfile.txt
结束标记\E结束 \U\L 的作用s/^(\w)/\U$1\E.txt/file.txtFILE.txt

#示例

基础重命名

$ touch 1.txt 2.txt 3.txt                   # 创建一组文件
$ file-rename -v 's/\.txt$/.md/' *          # 将 .txt 后缀替换为 .md
1.txt renamed as 1.md
2.txt renamed as 2.md
3.txt renamed as 3.md

集合映射

$ file-rename -v 'y/123/abc/' *             # 将 123 映射为 abc
1.md renamed as a.md
2.md renamed as b.md
3.md renamed as c.md

正则捕获

$ file-rename -v 's/(.*)\.md/\1\1\1.md/' *  # 将文件名重复 3 次
a.md renamed as aaa.md
b.md renamed as bbb.md
c.md renamed as ccc.md
  • (.*) 创建一个捕获
  • \1 表示第一个捕获,\1\1\1 重复三次

大小写转换

$ file-rename -v '$_ = uc($_)' *            # 文件名转换为大写
aaa.md renamed as AAA.MD
bbb.md renamed as BBB.MD
ccc.md renamed as CCC.MD
$ file-rename -v '$_ = lc($_)' *            # 文件名转换为小写
AAA.MD renamed as aaa.md
BBB.MD renamed as bbb.md
CCC.MD renamed as ccc.md
$ file-rename -v '$_ = ucfirst($_)' *       # 首字母大写
aaa.md renamed as Aaa.md
bbb.md renamed as Bbb.md
ccc.md renamed as Ccc.md
$ file-rename -v '$_ = lcfirst($_)' *       # 首字母小写
Aaa.md renamed as aaa.md
Bbb.md renamed as bbb.md
Ccc.md renamed as ccc.md

正则的大小写转换

$ file-rename -v 's/(.*?)\.md/\U$1\E.md/' *
aaa.md renamed as AAA.md
bbb.md renamed as BBB.md
ccc.md renamed as CCC.md
  • \U 表示后续内容转换为大写,直到 \E 为止
  • $1 表示第一个正则捕获

#推荐阅读

#手册

更新: 2026/3/3

作者: PlanC

创建: 2026/3/3