rename命令简单使用

rename命令是Linux下功能非常强的的重命名工具,利用正则表达式使得该命令的使用非常灵活。rename命令主要用于批量修改文件名, 其实linux下还可以使用别的办法来批量修改文件名(如mv,但mv只能对单个文件改名), 但使用rename显然更方便。

rename命令的格式:

SYNOPSIS
        rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
DESCRIPTION
       "rename" renames the filenames supplied according to the rule specified
       as the first argument.  The perlexpr argument is a Perl expression
       which is expected to modify the $_ string in Perl for at least some of
       the filenames specified.  If a given filename is not modified by the
       expression, it will not be renamed.  If no filenames are given on the
       command line, filenames will be read via standard input.
 
       For example, to rename all files matching "*.bak" to strip the
       extension, you might say
 
               rename 's/\.bak$//' *.bak
 
       To translate uppercase names to lower, you’d use
 
               rename 'y/A-Z/a-z/' *
 
OPTIONS
       -v, --verbose
               Verbose: print names of files successfully renamed.
 
       -n, --no-act
               No Action: show what files would have been renamed.
 
       -f, --force
               Force: overwrite existing files.

-v表示输出rename命令执行的详细过程;
-n表示预览rename命令的执行结果而不真正的修改文件;
-f表示在执行rename命令后,如果有同名文件则强制覆盖而不询问。
perlexpr(正则表达式)的用法可以参考perl的正则表达式部分。

rename命令的基本的通配符有以下几个:

? 可替代单个字符
* 可替代多个字符
[charset] 可替代charset集中的任意单个字符

如文件夹中有这些文件foo1, …, foo9, foo10, …, foo278,如果使用

rename foo foo0 foo?

则它只会把foo1到foo9的文件重命名为foo01到foo09,因为?通配符只能替代单个字符,所以被重命名的文
件只是有4个字符长度名称的文件,文件名中的foo被替换为foo0。

再来看通配符[charset]的用法,还是继续在上面所说的文件夹中,执行如下命令

rename foo0 foo foo0[2]*

则从foo0200到foo0278的所有文件都被重命名为foo200到foo278,文件名中的foo0被替换为foo。

简单的rename使用命令:

# 字母的替换,把文件名中的AA替换成aa。其中*表示当前目录下的所有文件
rename "s/AA/aa/" *
# 修改文件的后缀,把.html 后缀的改成 .php后缀
rename "s/\.html/\.php/" *
# 批量添加文件后缀,把所有的文件名都以txt结尾
rename "s/$/\.txt/" *
# 批量删除文件名,把所有以.txt结尾的文件名的.txt删掉
rename "s/\.txt//" *
# 批量删除当前目录下所有文件名开头的数字部分
rename 's/^\d+//' *
# 批量删除当前目录下以.html为后辍的文件名开头的数字部分
rename 's/^\d+//' *.html
# 将所有文件的.bak扩展去除
rename 's/\.bak$//' *.bak
# 将所有文件中的大写字母转为小写
rename 'y/A-Z/a-z/' *

在执行之前可以使用-n参数看看执行命令之后的结果是什么,这样可以避免误操作。rename还有更多的功能, 可以使用man rename查看更多的使用方式。

另外,将mv命令与find命令通过管道联结也是可以实现批量改名的,但这种方式没有rename命令灵活简单。

Monitor Your Web Site 24/7 - Receive email and SMS alerts anytime your web site goes down.

Related Posts

Leave a Reply

Monitor Your Web Site 24/7 - Receive email and SMS alerts anytime your web site goes down.

About Me

About Me
Record Technical Articles at Gooss.org.

Entries (RSS) and Comments (RSS). Valid XHTML and CSS and XFN.

© Copyright 2009 山海经. All rights reserved.

Social Bookmarks

Copyright © Designed by: Free WP Templates
Food Charts |  About Breast Milk |  Organic Food