Wie speichere ich Dateinamen unter einem anderen Namen?

Wie speichere ich Dateinamen unter einem anderen Namen?

Ich möchte, dass mein Skript aus einer Liste neuer Namen liest und dann eine neue Datei unter einem neuen Namen speichert, der aus den ersten drei Buchstaben des Dateinamens plus einem Zähler besteht, der für jede Datei, die mit denselben drei Buchstaben beginnt, eins hinzufügt.

Angenommen, dies sind meine alten und neuen Dateinamen-

Liste der Dateinamen: A77 A77 A77 A78 A78

listofNewNames: A7701 A7702 A7703 A7801 A7802 (prospektiv, listofNewNames soll nicht gespeichert werden)

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

Das ist soweit alles, was ich habe, aber jedes Mal, wenn sich die Buchstaben ändern, muss der Zähler wieder bei 0 anfangen, so dass die Länge der Dateinamen nie 5 beträgt. Sie beträgt beispielsweise 3 und dann 2, abhängig von der Anzahl der Dateien.

Ich hoffe, ich habe mich klar ausgedrückt. Vielen Dank im Voraus.

Antwort1

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

Antwort2

Sieh dir das an:

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

Im Moment gibt das Skript Dateinamen wie

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

verwandte Informationen