写一个SHELL脚本实现批量替换一个目录下所有文件中包括“a”换成“b”,如aaa.txt、adb.txt 执行脚本后文件名变成bbb.txt、bdb.txt 求大神帮助啊
1 回答
已采纳
onemoo
TA贡献883条经验 获得超454个赞
#!/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之类的来处理。
- 1 回答
- 0 关注
- 1694 浏览
添加回答
举报
0/150
提交
取消
