You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

bash迭代批量重命名文件仅生成单个文件的问题求解

错误原因

  • 核心问题是正序遍历导致源文件被提前覆盖:你当前的for循环会按文件名从小到大匹配,优先处理backup-001.bak,第一次执行mv就会把它重命名为backup-002.bak,直接覆盖原本存在的backup-002.bak源文件。
  • 后续循环原本要处理的backup-002.bak到backup-007.bak都已经被前一步的重命名操作覆盖,所有文件层层叠加覆盖后,最终只会剩下最后生成的backup-008.bak。
  • 附加问题:你使用的通配符backup-00[0-7].bak会匹配backup-000.bak,如果目录下存在该文件会被误处理,和你实际要操作的backup-001.bak到backup-007.bak的范围不符。

修复方案

只需要改成倒序遍历,从编号最大的文件开始重命名,就不会出现覆盖问题:

# 从7倒序迭代到1,先改大编号文件,避免覆盖待处理的小编号源文件
for num in {7..1}; do
    oldname="backup-00${num}.bak"
    newname="backup-00$((num + 1)).bak"
    mv -- "$oldname" "$newname"
done

内容的提问来源于stack exchange,提问作者thewooster

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 23:54:03