
Quiero que mi secuencia de comandos lea una lista de Nuevos nombres y luego guarde un nuevo archivo con un nuevo nombre que serán las primeras tres letras del nombre del archivo más un contador que agrega uno por cada archivo que comience con las mismas tres letras.
Supongamos que estos son mis nombres de archivo antiguos y nuevos:
lista de nombres de archivo: A77 A77 A77 A78 A78
listofNewNames: A7701 A7702 A7703 A7801 A7802 (prospectivo, listofNewNames no está diseñado para guardarse)
COUNTER=0
for i in listofFileNames; do
while [$COUNTER -lt 5]
let "COUNTER=COUNTER+01"
done
newName=${oldfilename}${COUNTER}.L2_LAC_OC
done
Esto es hasta ahora lo que tengo, pero cada vez que las letras cambian, el contador debe reiniciarse a 0, por lo que la longitud de los nombres de los archivos nunca es 5. Es, por ejemplo, 3 y luego 2, dependiendo de la cantidad de archivos.
Espero haberme dejado claro. Gracias de antemano.
Respuesta1
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
Respuesta2
Mira esto:
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
por el momento el script le dará nombres de archivos como
NewName: A7701
NewName: A7702
NewName: A7703
NewName: A7801
NewName: A7802