批量给文件名加上某一个后缀的方法很简单
mv * *.bak
这样能把当前目录下的所有文件加上.bak后缀.可是有一次我手贱,连续把这个命令执行了很多遍,所以把目录下的文件名都搞成xxx.bak.bak.bak.bak.bak.bak.bak了,很是难看,该怎么还原呢?
当然不能手工一个一个改,于是我请强大的shell出马,写了如下一个shell脚本
#!/bin/sh
for file in *.bak
do
short=${file%%.bak*}
mv $file ${short}.bak
done
这样就能成功的把xxx.bak.bak.bak.bak.bak.bak.bak全都变成xxx.bak了,很强大有木有
其实关键就在于参数替换的运用,下面总结一下
| ${param:-default} | 如果param为空,整个式子的值就等于default |
| ${#param} | 整个式子的值为param的长度 |
| ${param%word} | 从param尾部开始删除与word匹配的最小部分,返回剩余部分 |
| ${param%%word} | 从param尾部开始删除与word匹配的最长部分,返回剩余部分 |
| ${param#word} | 从param头部开始删除与word匹配的最小部分,返回剩余部分 |
| ${param##word} | 从param头部开始删除与word匹配的最长部分,返回剩余部分 |
再补充几个用法
| ${param:=bar} | 检查param是否为空,若不为空,则返回其值;否则将param赋值为bar,然后返回这个值 |
| ${param:?bar} | 若param为空或不存在,则输出param:bar并异常终止脚本 |
| ${param:+bar} | param存在且不为空的情况下才返回param,否则返回空(貌似bar在这里没用) |
- 参考资料: 《Linux 程序设计》
本文介绍了一个实用的Shell脚本技巧,通过编写简单的脚本来批量去除文件名中多余的.bak后缀,使其恢复到初始状态。文章详细解释了如何利用参数替换功能实现这一目标,并附带介绍了其他几种参数替换的使用方法。
696

被折叠的 条评论
为什么被折叠?



