linux命令之rename

本文介绍如何使用Linux下的rename命令批量重命名文件。包括C语言版本和Perl语言版本的使用方法,以及支持的通配符和正则表达式示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

在linux系统中重命名文件,经常用到mv命令,批量重命名文件rename是最好的选择。

linux的rename命令有两个版本,一个是c语言版本的,一个是perl语言版本的,判断方法:
输入man rename 看到第一行是: 
RENAME(1) Linux Programmer’s Manual RENAME(1)
这个就是C语言版本的 ---我的就是C语言版本
而如果出现:
RENAME(1) Perl Programmers Reference Guide RENAME(1)
则是Perl版本的了
 
C语言版本格式:rename 原字符串 新字符串 文件名
样例1:目录test下存在两个文件:a_01、a_02,若需要将文件名中的a替换为b,其他部分保持不变,则
1) 若当前位于test目录下,则执行 
 

rename a b *

2) 若当前位于test的父目录,则执行

rename a b test/*

Perl语言版本格式:rename 's/原字符串/新字符串/' 文件名
样例2:题目如样例1,则
1) 若当前位于test目录下,则执行 

rename 's/a/b/' *

2) 若当前位于test的父目录,则执行

rename 's/a/b' test/*

rename的参数
 
rename命令的格式:
rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
 
第一个参数:被替换掉的字符串
第二个参数:替换成的字符串
第三个参数:匹配要替换的文件模式
 
例子:rename  main1.c main.c main1.c  将main1.c重命名为main.c
 
rename支持通配符
?    可替代单个字符
*    可替代多个字符
[charset]    可替代charset集中的任意单个字符
例子:文件夹中有这些文件foo1, ..., foo9, foo10, ..., foo278 

如果使用      rename foo foo0 foo?
会把foo1到foo9的文件重命名为foo01到foo09,重命名的文件只是有4个字符长度名称的文件,文件名中的foo被替换为foo0。
如果使用      rename foo foo0 foo??
foo01到foo99的所有文件都被重命名为foo001到foo099,只重命名5个字符长度名称的文件,文件名中的foo被替换为foo0。
如果使用      rename foo foo0 foo*
foo001到foo278的所有文件都被重命名为foo0001到foo0278,所有以foo开头的文件都被重命名。
如果使用      rename foo0 foo foo0[2]*
从foo0200到foo0278的所有文件都被重命名为foo200到foo278,文件名中的foo0被替换为foo。
 

rename支持正则表达式
例子:

字母的替换rename "s/AA/aa/" *  //把文件名中的AA替换成aa
修改文件的后缀rename "s//.html//.php/" *     //把.html 后缀的改成 .php后缀
批量添加文件后缀rename "s/$//.txt/" * //把所有的文件名都以txt结尾
批量删除文件名rename "s//.txt//" * //把所有以.txt结尾的文件名的.txt删掉


### 如何使用 Linux `rename` 命令批量重命名文件 #### 安装 `rename` 对于未安装 `rename` 的系统,可以通过包管理器进行安装: ```bash sudo apt update && sudo apt install rename ``` 此命令更新软件源并安装 `rename` 工具[^2]。 #### 使用基本语法 `rename` 命令的基本形式如下: ```bash rename [选项] 'perl正则表达式' 文件... ``` 其中,“perl正则表达式”用来定义旧名称到新名称的转换规则;“文件...”表示要被重命名的一个或多个文件[^1]。 #### 替换单词或字符 如果想要替换文件名中的特定单词或字符,可以这样做: 假设有一系列 `.txt` 结尾的文件希望改为 `.log` 结尾,则执行下面指令: ```bash rename -v 's/\.txt$/\.log/' *.txt ``` 这里 `-v` 参数使得每次成功改名都显示出来。上述命令会将当前目录下的所有 .txt 文件扩展名变更为 .log[^4]。 #### 移除特殊字符(如空格) 针对文件中含有空格的情况,可通过以下方式去除这些不必要的空白符: ```bash rename 's/\s+//g' * ``` 这条语句的作用是从选定的所有文件的名字里删除所有的空格(\s+)[^3]。 #### 应用复杂模式匹配 为了实现更加复杂的重命名逻辑,可采用 Perl 正则表达式的强大功能来进行精确控制。例如,仅更改某些特定位置上的字符串: ```bash rename 's/^prefix_(.*)/$1_suffix/' prefix_* ``` 这将会把形如 `prefix_filename` 这样的名字变成 `filename_suffix` 形式[^5]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值