
Я хочу, чтобы мой скрипт считывал данные из списка NewNames, а затем сохранял новый файл под новым именем, которое будет состоять из первых трех букв имени файла плюс счетчик, добавляющий единицу для каждого файла, начинающегося с тех же трех букв.
Предположим, это мои старые и новые имена файлов:
списокИменФайлов: 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