Bash

如何使用轉換將大量 jpg 文件重命名為 png

  • November 19, 2015

假設我有一堆.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中嗎?

這是一個起點;它假設索引只上升到 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

引用自:https://unix.stackexchange.com/questions/244066