为了账号安全,请及时绑定邮箱和手机立即绑定

linux文件替换

linux文件替换

gjw 2016-08-20 19:54:11
 写一个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之类的来处理。

查看完整回答
反对 回复 2016-08-21
  • onemoo
    onemoo
    代码是直接复制的吗? 是的话,试试在Linux下手打一遍。
  • gjw
    gjw
    好的 我知道了 谢谢
  • gjw
    gjw
    非常感谢啊 用sed命令就可改了 就是window和linux不兼容的问题
点击展开后面1
  • 1 回答
  • 0 关注
  • 1612 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信