ファイル名を別の名前で保存するにはどうすればいいですか?

ファイル名を別の名前で保存するにはどうすればいいですか?

スクリプトで listofNewNames から読み取り、ファイル名の最初の 3 文字と、同じ 3 文字で始まるファイルごとに 1 ずつ加算されるカウンターを組み合わせた新しい名前で新しいファイルを保存したいと思います。

これらが古いファイル名と新しいファイル名だとします。

ファイル名のリスト: A77 A77 A77 A78 A78

listofNewNames: A7701 A7702 A7703 A7801 A7802 (予定、listofNewNames は保存されることを意図していません)

COUNTER=0
for i in listofFileNames; do
while [$COUNTER -lt 5]
let "COUNTER=COUNTER+01"
done
newName=${oldfilename}${COUNTER}.L2_LAC_OC
done

これまでのところはこれで完了ですが、文字が変わるたびにカウンターを 0 から再開する必要があるため、ファイル名の長さが 5 になることはありません。ファイルの数に応じて、たとえば 3 だったり 2 だったりします。

私の説明が明確であったことを願います。よろしくお願いします。

答え1

last_name=""
listofFileNames=(A77 A77 A77 A78 A78)

for name in "${listofFileNames[@]}"; do
        test "$name" != "$last_name" && COUNTER=1
        last_name="$name"
        printf "%s%02d\n" "${name}" "${COUNTER}"
        ((COUNTER++))
done

答え2

これを参照してください:

ListOfFiles=("A77" "A77" "A77" "A78" "A78")
for oldfile in "${ListOfFiles[@]}"; do 
    COUNT=1; 
    while [[ -f "$(printf "%s%02d" ${oldfile} ${COUNT})" ]]; do 
        COUNT=$(($COUNT + 1)) 
    done 
    echo "NewName: $(printf "%s%02d" ${oldfile} ${COUNT})"
    touch "$(printf "%s%02d" ${oldfile} ${COUNT})"
done

現時点ではスクリプトは次のようなファイル名を表示します

NewName: A7701
NewName: A7702
NewName: A7703
NewName: A7801
NewName: A7802

関連情報