1. 苏葳的备忘录首页
  2. 软件

Linux下C程序版及Perl版批量重命名命令rename的用法

linux rename 正则表达式rename命令是Linux下功能非常强的的重命名工具,利用正则表达式使得其使用地非常灵活。如网上所说,rename命令其实有C语言版和perl版之分,区分方法是man rename,如果第一行有”perl”字样,则是perl版,反之则是C程序版。试了一下,centos 6里的rename显然是C版。此版本的rename没有perl版那么多的参数选项,使用格式也与perl版有很大不同。以下是C版rename的一个例子:

[root@default tmp]# ls
ff31  fff1  fff3

然后rename它们:

[root@default tmp]# rename ff ffz fff[0-1]
[root@default tmp]# ls
ff31  fff3  ffzf1

可以看到,最后一个参数用正则限制了匹配上的文件列表。而第一个参数也是从左至右优先匹配的。相比之下,perl版的rename就完全是一个正则表达式的游戏了。命令格式:

rename [ -v ] [ -n ] [ -f ] perlexpr [ files ]
-v, --verboseVerbose: print names of files successfully renamed.
-n, --no-actNo Action: show what files would have been renamed.
-f, --forceForce: overwrite existing files.

简单的rename使用命令:

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

比如在windows 7下复制整个文件夹下的文件再拷入同一文件夹,会产生很多文件名后加上“ – 副本”的文件,拷入linux下之后,感觉中文文件名操作不便,就可以用:

rename "s/ - 副本/_bak/" *

来一次性把所有文件改为后面加_bak的形式。其实能看出perl的正则替换表达式与vi的替换表达式还是很象的。

原创文章,作者:苏葳,如需转载,请注明出处:https://www.swmemo.com/458.html

发表评论

邮箱地址不会被公开。 必填项已用*标注