猿问

linux文件替换

 写一个SHELL脚本实现批量替换一个目录下所有文件中包括“a”换成“b”,如aaa.txt、adb.txt  执行脚本后文件名变成bbb.txt、bdb.txt 

求大神帮助啊

gjw
浏览 1613回答 1
1回答

onemoo

#!/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之类的来处理。
随时随地看视频慕课网APP
我要回答