#!/bin/bash
for i in `ls *$1`
do
echo "${i%.*}"
mv $i ${i%.*}.$2
done
常见的批量更改文件后缀的脚本
[root@vm37-005 ~]# i=abc.def.ghi.jkl
[root@vm37-005 ~]# echo ${i%.*}
abc.def.ghi
[root@vm37-005 ~]# echo ${i%%.*}
abc
[root@vm37-005 ~]# echo ${i##*.}
jkl
[root@vm37-005 ~]# echo ${i#*.}
def.ghi.jkl
[root@vm37-005 ~]#
实践后得知
${i%.*}:取最后一个"."之前的内容 (从 $i
的右边开始匹配模式子串 ".*" ,并将最短的匹配结果删除)
${i%%.*}:取第一个"."之前的内容 (从 $i
的右边开始匹配模式子串 ".*" ,并将最长的匹配结果删除)
${i##*.}:取最后一个"."之后的内容 (从 $i
的左边开始匹配模式子串 "*." ,并将最长的匹配结果删除)
${i#*.}:取第一个"."之后的内容 (从 $i
的左边开始匹配模式子串 "*." ,并将最短的匹配结果删除)