详解Linux系统中rename命令的使用方法
这篇文章主要介绍了Linux系统中rename命令的使用方法,是Linux入门学习中的基础知识,需要的朋友可以参考下Dos/Windows下,对文件改名用rename。而书上说,Linux下对文件或目录改名该用mv。我一直也是这样做的,却忽略了Linux下也有个叫rename的命令。都是rename,但功能上就有点差异了。Linux下的rename更像批量改名的工具,是util-linux套件中提供的。
从mv和rename命令的man文档中,可以看到如下信息:
代码如下:
mv - move (rename) files
rename - Rename files
也就是说,mv也能用于改名,但不能实现批量处理(改名时,不支持*等符号的),而rename可以。
rename使用的格式:
代码如下:
$ rename foo foo0 foo?
rename需要提供三个参数,然后才能决定最终结果。
模拟一下man文档的例子,原文件:
代码如下:
$ for i in `seq 100`;do touch foo$i;done
$ ls
foo1 foo18foo27foo36foo45foo54foo63foo72foo81foo90
foo10 foo19foo28foo37foo46foo55foo64foo73foo82foo91
foo100foo2 foo29foo38foo47foo56foo65foo74foo83foo92
foo11 foo20foo3 foo39foo48foo57foo66foo75foo84foo93
foo12 foo21foo30foo4 foo49foo58foo67foo76foo85foo94
foo13 foo22foo31foo40foo5 foo59foo68foo77foo86foo95
foo14 foo23foo32foo41foo50foo6 foo69foo78foo87foo96
foo15 foo24foo33foo42foo51foo60foo7 foo79foo88foo97
foo16 foo25foo34foo43foo52foo61foo70foo8 foo89foo98
foo17 foo26foo35foo44foo53foo62foo71foo80foo9 foo99改名结果:
(红色是没有改动的,蓝色是有改动的一部分)
引用
代码如下:
$ rename foo foo0 foo?
$ ls
foo01foo100foo20foo30foo40foo50foo60foo70foo80foo90
foo02foo11 foo21foo31foo41foo51foo61foo71foo81foo91
foo03foo12 foo22foo32foo42foo52foo62foo72foo82foo92
foo04foo13 foo23foo33foo43foo53foo63foo73foo83foo93
foo05foo14 foo24foo34foo44foo54foo64foo74foo84foo94
foo06foo15 foo25foo35foo45foo55foo65foo75foo85foo95
foo07foo16 foo26foo36foo46foo56foo66foo76foo86foo96
foo08foo17 foo27foo37foo47foo57foo67foo77foo87foo97
foo09foo18 foo28foo38foo48foo58foo68foo78foo88foo98
foo10foo19 foo29foo39foo49foo59foo69foo79foo89foo99
代码如下:
$ rename foo foo0 foo??
$ ls
foo001foo011foo021foo031foo041foo051foo061foo071foo081foo091
foo002foo012foo022foo032foo042foo052foo062foo072foo082foo092
foo003foo013foo023foo033foo043foo053foo063foo073foo083foo093
foo004foo014foo024foo034foo044foo054foo064foo074foo084foo094
foo005foo015foo025foo035foo045foo055foo065foo075foo085foo095
foo006foo016foo026foo036foo046foo056foo066foo076foo086foo096
foo007foo017foo027foo037foo047foo057foo067foo077foo087foo097
foo008foo018foo028foo038foo048foo058foo068foo078foo088foo098
foo009foo019foo029foo039foo049foo059foo069foo079foo089foo099
foo010foo020foo030foo040foo050foo060foo070foo080foo090foo100该例子给出了两种文件批量重命名的用法:
引用
第一个参数:被替换掉的字符串
第二个参数:替换成的字符串
第三个参数:匹配要替换的文件模式
rename支持通配符,基本的通配符有以下几个:
引用
? 可替代单个字符
* 可替代多个字符
可替代charset集中的任意单个字符
看看*的作用:
引用
$ rm -f *
$ for i in `seq 100`;do touch foo$i;done
$ rename foo foo0 foo*
$ ls
foo01 foo018foo027foo036foo045foo054foo063foo072foo081foo090
foo010 foo019foo028foo037foo046foo055foo064foo073foo082foo091
foo0100foo02 foo029foo038foo047foo056foo065foo074foo083foo092
foo011 foo020foo03 foo039foo048foo057foo066foo075foo084foo093
foo012 foo021foo030foo04 foo049foo058foo067foo076foo085foo094
foo013 foo022foo031foo040foo05 foo059foo068foo077foo086foo095
foo014 foo023foo032foo041foo050foo06 foo069foo078foo087foo096
foo015 foo024foo033foo042foo051foo060foo07 foo079foo088foo097
foo016 foo025foo034foo043foo052foo061foo070foo08 foo089foo098
foo017 foo026foo035foo044foo053foo062foo071foo080foo09 foo099
再看看的作用:
引用
代码如下:
$ rm -f *
$ for i in `seq 100`;do touch foo$i;done
$ rename foo foo0 foo*
$ lsfoo09 foo099foo17foo26foo35foo44foo53foo62foo71foo80
foo090foo1 foo18foo27foo36foo45foo54foo63foo72foo81
foo091foo10 foo19foo28foo37foo46foo55foo64foo73foo82
foo092foo100foo2 foo29foo38foo47foo56foo65foo74foo83
foo093foo11 foo20foo3 foo39foo48foo57foo66foo75foo84
foo094foo12 foo21foo30foo4 foo49foo58foo67foo76foo85
foo095foo13 foo22foo31foo40foo5 foo59foo68foo77foo86
foo096foo14 foo23foo32foo41foo50foo6 foo69foo78foo87
foo097foo15 foo24foo33foo42foo51foo60foo7 foo79foo88
foo098foo16 foo25foo34foo43foo52foo61foo70foo8 foo89
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/*
脚本实现方法:
代码如下:
find -name "a*" -print |
while read name
do
echo $name
rename 's/a/b/' $name
done
http://www.zzvips.com/article/4673.html
页:
[1]