虽然 mv 可以重命名文件或目录,但是不可以批量重命名也不支持正则表达式(不写脚本的情况下)
幸好Linux系统下还有个rename命令可以使用,而且支持批量重命名和正则表达式。
rename有两个版本,一种是c语言版本、一种是Perl版本,c版本比较古老,几乎已经绝迹,这句话我是从网上看见的,但是事实证明还没绝迹,至少centos6.7就是c语言版本的。
Perl版本的更加强大,支持正则表达式,需要就是这个版本,google了一下找到了一个简略版。
地址:http://docstore.mik.ua/orelly/perl/cookbook/ch09_10.htm#ch09-40514
代码:
#!/usr/bin/perl -w
# rename - Larry's filename fixer
$op = shift or die "Usage: rename expr [files]\n";
chomp(@ARGV = <STDIN>) unless @ARGV;
for (@ARGV) {
$was = $_;
eval $op;
die $@ if $@;
rename($was,$_) unless $was eq $_;
}
保存为 rename,加上可执行权限就可以了
用法参考:
rename 's/\.orig$//' *.orig rename 'tr/A-Z/a-z/ unless /^Make/' * rename '$_ .= ".bad"' *.f rename 'print "$_: "; s/foo/bar/ if =~ /^y/i' * find /tmp -name '*~' -print | rename 's/^(.+)~$/.#$1/'
应用实例:
1. 批量修改文件后缀
./rename 's/\.htm$/\.html/' *.htm
2. 批量去除文件.bak后缀
./rename 's/\.bak$//' *.bak
3. 批量添加.txt后最
rename 's/$/\.txt/' *
4. 批量文件开头加上hello字符串
rename 's/^/hello/' *
5. 批量替换小写字母为大写
rename 'y/a-z/A-Z/' *
6. 批量去除文件名中的空格
rename 's/[ ]+//' *
7. 批量去除文件名的前缀
rename 's/^\[*.*\]//' *
Leave a Reply
You must be logged in to post a comment.