
.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.jpg
今thenなどACDfff001.png
に名前を変更したいと思います。しかし、到着したら個別に名前を付けたいと思います。00-02.jpg
ACDfff002.png
00-05a.jpg
00-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