重命名文件
命令语法格式
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??
会把这些文件重名为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) 命令:
将以扩展名为.htm的文件的扩展名修改为.html。注意,命令里的星号(*)是由Shell进行解释的,匹配所有以.htm结尾的文件。
(3) 如果replacement为空,如下命令:
将去掉文件名中的_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 部分内容调整。加入详细的说明。处理文章中不正确的部分。