您的位置:首页 > 运维架构 > Linux

Linux 重命名命令 rename 和 mv 详解

2012-12-06 14:12 417 查看
刚学linux时,对文件重命名脑袋里立马呈现了rename命令,但却用不起来。G了一下,仍是一知半解,而且发现很多人对它也是很陌生!还有部分童鞋说直接使用mv,哎,mv还真管用,但老感觉命令名咋就那么不顺眼呢!

我们来man下吧,先man mv:


mv - move (rename) files


mv不仅有转移的功能,确实有重命名的含义,语法简单可理解为:


mv [path/]oldfilename [path/]newfilename


但只能是重名为当个文件。

我们再来man rename:


rename - renames multiple files


可以看出rename命令是专用于文件重命名的,而且是对批量文件重命名。

Linux的 rename版本

Linux的 rename 命令有两个版本,一个是C语言版本的,一个是Perl语言版本的,早期的Linux发行版基本上使用的是C语言版本的,现在已经很难见到C语言版本的了, 由于历史原因,在Perl语言大红大紫的时候,Linux的工具开发者们信仰Perl能取代C,所以大部分工具原来是C版本的都被Perl改写了,因为 Perl版本的支持正则处理,所以功能更加强大,已经不再需要C语言版本的了。

如何区分系统里的rename命令是哪个版本的?

输入 man rename 看到第一行是


RENAME(1) Linux Programmer’s Manual RENAME(1)


那么 这个就是C语言版本的。而如果出现的是:


RENAME(1)              Perl Programmers Reference Guide              RENAME(1)


这个就是Perl版本的了!

两个版本的语法差异

C语言的,按照man上面的注解,rename的语法格式是:

rename fromtofile


d这个命令有三个参数,分别是 from : 修改什么名字, to:改成什么名字, file 需要修改的文件是哪些。

用法示例:比如,有一批文件,都是以 log开头的, log001.txt, log002.txt ....... 一直到 log100.txt,现在想要把这批文件的log全部替换为 history


rename  log history log*


这句命令的意思很明白了,把 以 log开头的所有文件中的 log字符替换为 history,这样替换后的文件是: history001.txt, history002.txt ..... 一直到 history100.txt。

Perl 版本的批量重命名,带有Perl的好处是,你可以使用正则表达式来完成很奇特的功能。perl 版本的参数格式:

rename  perlexpr files


man rename的帮助示例:有一批文件,以 .bak结尾,现在想把这些 .bak 统统去掉:

rename     's/\.bak$//'        *.bak


这个命令很简单,因为我还没有系统学习过perl,我不知道perl里替换字符串是不是这么干的,但sed是这么干的,所以如果你有sed或者tr基础,很容易明白,这个替换和sed里的正则语法是一模一样的。

总结:所以如果你只是重名一个文件,那么还是mv方便快捷!
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: