我必须调整图像大小,并想动态重命名它们,名称如下
- Compet-210-123456.jpg
- Compet-210-123457.jpg
- ...
- Compet-211-123555.jpg 和
我想注射4K两个数字之间
- Compet-211-4K-123555.jpg
目前我只知道添加4K在结尾如下:
for img in ./Compet-[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9][0-9][0-9].jpg do;
convert "$img" -resize "3840x2160^" \
-gravity center \
-crop 3840x2160 \
"${img%.jpg}-4k.jpg"
done
答案1
根据原始文件名,有时可以精确修剪不需要的部分:
head=${img%-*.jpg}
tail=${img#./Compet-*-}
newimg=$head-4k-$tail
另一种方法是使用正则表达式匹配=~
:
re='^\./(Compet-[0-9]+)-([0-9]+\.jpg)$'
if [[ $img =~ $re ]]; then
newimg=${BASH_REMATCH[1]}-4k-${BASH_REMATCH[2]}
convert "$img" ... "$newimg"
fi
Bash 使用“POSIX 扩展正则表达式”正则表达式语法,并且捕获组放在 BASH_REMATCH 数组中。
我使用一个变量来保存正则表达式模式,因为否则右侧的引用/转义规则[[ ]]
可能会变得有点难看。