![如何用不同的名称保存文件名?](https://linux22.com/image/122862/%E5%A6%82%E4%BD%95%E7%94%A8%E4%B8%8D%E5%90%8C%E7%9A%84%E5%90%8D%E7%A7%B0%E4%BF%9D%E5%AD%98%E6%96%87%E4%BB%B6%E5%90%8D%EF%BC%9F.png)
我希望我的脚本从 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