批量修改文件名,删除文件名中的部分内容
原创hongfan93627524 博主文章分类:shell ©著作权
©著作权归作者所有:来自51CTO博客作者hongfan93627524的原创作品,请联系作者获取转载授权,否则将追究法律责任
#!/bin/bash
#
count=1
for asf in *.mp3
do
new=${asf%_*}.${asf#*.}
echo $new
let count++
done
-----------------------------------------------
借助%和#操作符可以轻松的解析"名称.扩展名"这种格式的文件名字。
例1:
;file_jpg="sample.jpg"
;name=${file_jpg%.*}
Echo FIle name is:$name
输出结果为: File name is : sample
例2:
;extension=${file_jpg#*.}
;echo Extension is : $extension
输出结果是:Extension is : jpg
工作原理:
第一个任务中,为了从“名称。扩展名”这种格式文件名中提取名称,我们用了%操作符。
${VAR%.*}的含义是:
从$VAR中删除位于%右侧的通配符(在例1中是.*)所匹配的字符串。通配符从右向左进行匹配。例1中VAR的值为sample.jpg,那么通配符从右向左匹配.*的话会匹配到.jpg。因此从$VAR中删除匹配结果,就得到了文件名"sample"
%属于非贪婪匹配操作。它从右到左找出匹配通配符的最短结果。
%%属于贪婪匹配,所谓贪婪的意思就是会匹配符合条件的最长的字符串。匹配方向也是从右向左匹配。如果$VAR的值为hack.fun.book.txt,那么用贪婪匹配${VAR%%.*},则匹配到的结果为hack。
#操作符也是非贪婪匹配,不过其匹配方向是从左向右。当然也是匹配最短结果。
${VAR#*.}的含义是:
从$VAR中删除位于#右侧的通配符(这里即*.)所匹配的字符串,匹配方向是从左向右。
##则属于贪婪匹配,即从左向右匹配最长结果并删除匹配结果。
再举例说明下:
VAR=hack.fun.book.txt
使用#操作符:
$echo ${VAR#*.}
输出结果为: fun.book.txt
使用##操作符:
$ echo ${VAR##*.}
输出结果为 txt
练习:URL=www.google.cn #echo ${URL%.*} ${URL%%.*} ${URL#*.} ${URL##*.}
![](https://ucenter.51cto.com/images/noavatar_middle.gif)
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章