「rename(1)」-

  LINUX MANUAL PAGES

重命名文件

命令语法格式

rename [options] expression replacement file…

命令描述

命令rename用于文件的重命名。该命令将文件参数file中匹配expression的部分替换成replacement

参数[options]为命令行选项;expression是一个表达式,用于匹配文件名中要修改的部分;replacement是要替换成的内容;file…是要被重命名的多个文件。

而mv(1)实质上并不能算是个十分好用的重命名命令。

命令支持的选项及含义

-s, –symlink
不要重命名符号链接,而是重命名符号链接指向的文件。

-n, –no-act
不进行重命名操作。该选项可以配合-v选项来查看执行命令后将会进行哪些文件的重命名。

-o, –no-overwrite
不要覆盖已经存在的文件。

-v, –verbose
输出那些被重命名的文件。

-V, –version
显示版本信息并退出。

-h, –help
显示帮助信息并退出。

使用示例

(1) 对一群文件名为foo1, …, foo9, foo10, …, foo278的文件执行下面的两条命令:

# rename foo foo0 foo?


# rename foo foo0 foo??

会把这些文件重名为foo001, …, foo009, foo010, …, foo278。注意,命令里的问号(?)是由Shell解释的,foo?匹配foo1~foo9,命令rename foo foo0 foo?将这些文件重名为foo01~foo09。然后又执行了rename foo foo0 foo??命令,foo??匹配foo01~foo99,命令把它们重命名成foo001~foo099。正如你看到的,实际上并没有在foo100~foo278上执行操作。

(2) 命令:

# rename .htm .html *.htm

将以扩展名为.htm的文件的扩展名修改为.html。注意,命令里的星号(*)是由Shell进行解释的,匹配所有以.htm结尾的文件。

(3) 如果replacement为空,如下命令:

# rename ‘_with_long_name’ ” file_with_long_name.*

将去掉文件名中的_with_long_name部分。

注意事项

命令rename在某些Linux发行版里有两个:一个是Perl提供的,是一个Perl脚本;另一个是util-linux包提供的,它是一个二进制程序。这两个的用法不同,本文提到的rename指的是util-linux中的rename命令。例如,在Debian中,该util-linux中的rename命令被重命名为rename.ul,而rename命令实质是指向file-rename的一个Perl脚本。

该命令没有保护措施。如果用户有权限修改文件名,则该命令将毫无疑问地执行该操作。例如,当命令以root身份在/lib目录下运行时,结果可能非常严重。在运行命令之前一定要做好备份,并且一定要清楚自己在做什么。

退出状态

0 所有的重名操作都执行成功。

1 所有的重命名操作都执行失败。

2 某些重命名操作执行失败。

4 没有文件被重名。

64 产生了意料之外的错误。

相关手册

mv(1)

参考文献

  • man 1 rename, Version rename.ul from util-linux 2.32

更新日志

  • 07/27/2017 创建文章。
  • 03/28/2018 部分内容调整。加入详细的说明。处理文章中不正确的部分。