版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/whandgdh/article/details/84612701
一、${}
1.1、提取文件名
file_jpg='sample.jpg'
name=${file_jpg%.*}
echo File name is:$name
1.2、提取扩展名
extension=${file_jpg#*.}
echo Extension is :$extension
1.3、${VAR%.*}
${VAR%.*} 的含义如下所述:
从 $VAR 中删除位于 % 右侧的通配符(在前例中是. * )所匹配的字符串。通配符从右向左
进行匹配。
给 VAR 赋值, VAR=sample.jpg 。那么,通配符从右向左就会匹配到.jpg,因此,从 $VAR
中删除匹配结果,就会得到输出 sample
% 属于非贪婪(non-greedy)操作。它从右到左找出匹配通配符的最短结果。还有另一个操作
符 %% ,这个操作符与 % 相似,但行为模式却是贪婪的,这意味着它会匹配符合条件的最长的字符串
1.3.1非贪婪模式
1.3.2、贪婪模式
操作符 %% 则用 .* 从右向左执行贪婪匹配( .fun.book.txt )
1.4、${VAR#*.}
${VAR#*.} 的含义如下所述:
从 $VAR 中删除位于 # 右侧的通配符(即在前例中使用的 *. )所匹配的字符串。通配
符从左向右进行匹配。
和 %% 类似, # 也有一个相对应的贪婪操作符 ## 。
##从左向右进行贪婪匹配,并从指定变量中删除匹配结果
1.4.1、非贪婪模式
var=hack.fun.book.txt
echo ${var#*.}
1.4.2、贪婪模式
echo ${var##*.}
操作符 ## 则用 *. 从左向右执行贪婪匹配( txt )
1.5、提取域名不同部分
URL=www.oracle.com
echo ${URL%.*}
echo ${URL%%.*}
echo ${URL#*.}
echo ${URL##*.}
二、rename
rename 命令利用Perl正则表达式修改文件名。综合运用 find 、 rename 和 mv ,我们能够做到很多。
2.1、利用rename脚本批量重命名
把以上图片格式名字改为image-1格式
#!/bin/bash
#文件名:rename.sh
#用途:重命名.jpg或 .png
count=1
for img in `find . -iname '*.jpg' -o -iname '*.png' -type f -maxdepth 1`
do new=image-$count.${img##*.}
echo "Renaming $img to $new"
mv "$img" "$new" #重命名
let count++
done
结果如下
2.2、rename批量重命名
rename *.jpg *.JPG
把所有jpg格式的改为JPG