#!/bin/bash
# 从ls指令获取当前目录下的所有文件,在for循环中以$filenamefull一次处理一个文件
for filenamefull in `ls *`; do
# 不是普通文件就跳过,处理下一个
if [ ! -f "$filenamefull" ]; then
continue
fi
# 提取文件名(去掉末尾扩展名)存入$filename
# 目的是后面只修改文件名,不修改扩展名
filename=${filenamefull%.*}
# 文件名中不包含'a'就跳过,处理下一个
if [ ! "`echo $filename | grep a`" ]; then
continue
fi
# 将文件名中的'a'全部替换为'b',将新文件名存入$newfilename
newfilename=${filename//a/b}
# 将文件扩展名存入$postfix
postfix=${filenamefull##*.}
# 将$newfilename和$postfix组合成新文件名,并用mv为文件改名
mv $filenamefull ${newfilename}.${postfix}
done
上面的脚本中,提取文件名和扩展名、文本替换那里是利用了bash内置的参数展开功能来处理字符串,你也可以用awk之类的来处理。