Linux 重命名命令 rename 和 mv 详解

刚学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版本的了!

两个版本的语法差异

  1. 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。
  2. Perl 版本的批量重命名,带有Perl的好处是,你可以使用正则表达式来完成很奇特的功能。perl 版本的参数格式:
    rename  perlexpr files
    man rename的帮助示例:有一批文件,以 .bak结尾,现在想把这些 .bak 统统去掉:
    rename     's/\.bak$//'        *.bak
    这个命令很简单,因为我还没有系统学习过perl,我不知道perl里替换字符串是不是这么干的,但sed是这么干的,所以如果你有sed或者tr基础,很容易明白,这个替换和sed里的正则语法是一模一样的。

总结:所以如果你只是重名一个文件,那么还是mv方便快捷!

posted @ 2012-12-06 14:12  码农神说  阅读(1135)  评论(0编辑  收藏  举报