写一个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 关注
- 1612 浏览
添加回答
举报
0/150
提交
取消