在Linux系统中,批量重命名文件通常是一项频繁的任务,rename
命令提供了一个快速有效的方式来完成这项工作。这个强大的命令可以通过模式匹配和正则表达式来修改文件名。
Linux rename命令介绍
rename
命令是用于批量重命名文件的工具。它可以根据用户指定的替换条件来更改文件名。这个条件通常是一种正则表达式,非常适合对文件名进行复杂的修改。
Linux rename命令适用的Linux版本
rename
命令在许多Linux发行版中都是可用的,如Ubuntu, Fedora, Debian等。但是,某些发行版,比如CentOS可能没有预安装这个命令。
- 对于CentOS 7,您可以使用
yum
来安装:
[linux@bashcommandnotfound.cn ~]$ sudo yum install prename
- 对于CentOS 8,您可以使用
dnf
来安装:
[linux@bashcommandnotfound.cn ~]$ sudo dnf install prename
Linux rename命令的基本语法
语法格式:
rename [options] 's/old/new/' files
Linux rename命令的常用选项或参数说明
选项 | 说明 |
---|---|
-v | 显示详细的重命名信息 |
-n | 演示重命名操作但不实际执行 |
-f | 覆盖现有文件 |
-h | 显示帮助信息 |
-V | 显示版本信息 |
Linux rename命令实例详解
实例1:简单的重命名操作
将所有.txt文件的扩展名改为.md:
[linux@bashcommandnotfound.cn ~]$ rename 's/\.txt$/.md/' *.txt
实例2:演示模式下的重命名
查看重命名操作的效果,而不实际执行:
[linux@bashcommandnotfound.cn ~]$ rename -n 's/\.txt$/.md/' *.txt
实例3:覆盖文件时的重命名
如果目标文件名存在,使用-f选项强制覆盖:
[linux@bashcommandnotfound.cn ~]$ rename -f 's/\.txt$/.md/' *.txt
实例4:将文件名中的空格替换为下划线
[linux@bashcommandnotfound.cn ~]$ rename 's/ /_/' *
实例5:将文件名转为小写
[linux@bashcommandnotfound.cn ~]$ rename 'y/A-Z/a-z/' *
实例6:添加前缀
给所有JPEG文件添加前缀"vacation_":
[linux@bashcommandnotfound.cn ~]$ rename 's/^/vacation_/' *.jpeg
实例7:去除数字
删除文件名中所有的数字:
[linux@bashcommandnotfound.cn ~]$ rename 's/[0-9]//' *
实例8:批量修改文件扩展名
将所有.jpg文件改名为.jpeg:
[linux@bashcommandnotfound.cn ~]$ rename 's/\.jpg$/.jpeg/' *.jpg
实例9:使用正则表达式分组
将文件名"photo1.jpg"重命名为"1_photo.jpg":
[linux@bashcommandnotfound.cn ~]$ rename 's/(photo)(\d+)/$2_$1/' photo1.jpg
实例10:详细模式的重命名
详细输出每次重命名的信息:
[linux@bashcommandnotfound.cn ~]$ rename -v 's/\.txt$/.md/' *.txt
实例11:递归重命名
递归地在子目录中重命名所有.txt文件为.md:
[linux@bashcommandnotfound.cn ~]$ find . -type f -name '*.txt' -exec rename 's/\.txt$/.md/' {} +
实例12:安全地避免覆盖文件
在重命名时检查目标文件名是否已存在,以避免数据丢失:
[linux@bashcommandnotfound.cn ~]$ rename -n 's/\.txt$/.md/' *.txt
实例13:将日期从文件名移至开头
例如,将"report-2021-01-01.doc"改为"2021-01-01-report.doc":
[linux@bashcommandnotfound.cn ~]$ rename 's/(.*?)-(\d{4}-\d{2}-\d{2})/$2-$1/' *.doc
实例14:删除文件名中的特定单词
删除文件名中的"sample"单词:
[linux@bashcommandnotfound.cn ~]$ rename 's/sample//' *
实例15:将所有PNG文件加上序号
为避免重复,在所有.png文件前加上序号:
[linux@bashcommandnotfound.cn ~]$ rename 'our $i = 0; s/^/sprintf("%04d-", $i++)/e' *.png
Linux rename命令的注意事项
- 确保在使用
rename
前理解其正则表达式和模式匹配的规则,以避免非预期的重命名结果。 - 使用
-n
选项来预览结果,确认无误后再执行实际的重命名操作。 - 使用
-v
选项可以查看每次重命名的具体细节,有助于调试和记录。 - 注意文件名中的空格和特殊字符,这些可能会影响正则表达式的匹配。
- 如果出现
bash: rename: command not found
,请根据上述安装步骤进行安装。
评论区