如何批量修改文件的扩展名?

#!/bin/bash
for f in *.*;
do
ext=`echo $f|awk -F. '{print $2}'`;
base=`basename "$f" .$ext`; mv "$f" "$base".$1; done
very good
我认为在Linux中根本不存在什么扩展名。用remove 可以改名的。不过就是不知道怎么批量的改。用s /str1/str2/g 好象就只是用在vi里的。不能用在目录的。不知道这样行不行:remove \*.htm
呵呵,MAN确实是个好命令啊
rename命令格式很固定
rename xx yy *zz?
固定3个参数,第3个参数使用通配符

真确理解:
将满足通配符*zz?(当然通配符有很多表达方式)的所有文件找出;接着在每个找出的文件名中找到含有xx的部分,将xx替换成yy,如果某个找出的文件名没有含有xx就不进行任何操作,如果某个找出的文件名含有多个xx就只将第一个xx替换成yy。

例子:
[root@lcf html]# ls
aabbccaabbcc.html aabb.html bbcc.html ccdd.html tt.txt
[root@lcf html]# rename bb ww *tml
[root@lcf html]# ls
aawwccaabbcc.html aaww.html ccdd.html tt.txt wwcc.html
[root@lcf html]#
说明:先查找符合*tml文件,tt.txt被首先排除;aabbccaabbcc.html有两个bb,但只改了第一个bb为ww,ccdd.html符合前面的通配符,但没有bb部分,因此不动。

顺便说一句,改单个文件名用mv命令。
不用rename的话简单点的有:
for f in ./*.HTML;do mv $f ${f%.HTML}.html ;done
还有一个:
find . -name '*.HTML' -exec mv {} `echo {}|sed 's/\.HTML/\.html/' ` \;
mv *.HTML *.html
krename
呵呵,厲害