如何使用 Convert 将批量 jpg 文件重命名为 png

如何使用 Convert 将批量 jpg 文件重命名为 png

假设我有一堆.jpg文件想要转换为.png.文件结构如下:

00-01.jpg 
00-02.jpg 
00-03.jpg 
00-04.jpg 
00-05a.jpg
00-05b.jpg
01-01.jpg 
01-02.jpg 
01-03a.jpg
01-03b.jpg
01-04a.jpg
01-04b.jpg

所以现在我想重命名 00-01.jpgACDfff001.png then 00-02.jpgtoACDfff002.png等等。然而,当我到达时00-05a.jpg00-05b.jpg 我想将它们ACDfff005a.png分别命名为ACDfff005b.png.

最终结果例如应该是:

00-01.jpg  ->  ACDfff001.png
00-02.jpg  ->  ACDfff002.png
00-03.jpg  ->  ACDfff003.png
00-04.jpg  ->  ACDfff004.png
00-05a.jpg ->  ACDfff005a.png
00-05b.jpg ->  ACDfff005b.png
01-01.jpg  ->  ACDfff006.png
01-02.jpg  ->  ACDfff007.png
01-03a.jpg ->  ACDfff008a.png
01-03b.jpg ->  ACDfff008b.png
01-04a.jpg ->  ACDfff009a.png
01-04b.jpg ->  ACDfff009b.png

这在 bash 或 python 中可能吗?

答案1

这是一个起点;假设索引最多只能达到 9;如果事实并非如此,你就必须延长它。

#!/bin/bash

index=0
lastseq=
for file in *.jpg
do
  base=$(basename "$file" .jpg)
  lastchar=${base: -1:1}
  if [[ $lastchar =~ [[:digit:]] ]]
  then
    index=$((index + 1))
    newname=$(printf "ACDfff%03d" $index)
    lastseq=$lastchar
  else
    seclast=${base: -2:1}
    if [[ $seclast != $lastseq ]]
    then
      index=$((index + 1))
      lastseq=$seclast
    fi
    newname=$(printf "ACDfff%03d%s" $index $lastchar)
  fi
  echo mv "$file" "${newname}.png"
done

相关内容