
我希望我的腳本從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。文件的數量。
我希望我已經說清楚了。提前致謝。
答案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