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

如何修复通过变量重命名以短横线开头文件的mv命令错误

修复bash重命名脚本中的mv命令错误

问题出在你给$i添加的多余引号转义上:"\"""$i""\""这种写法会让bash把字面的双引号作为文件名的一部分传递给mv,比如实际传递的参数是"-0"(包含引号),但你的文件实际名为-0,所以mv找不到对应的文件。

修正后的脚本

直接用"$i"即可,bash的双引号已经能正确处理以连字符开头的文件名,配合--标记选项结束,完全不需要额外转义引号:

for i in -*; do
  N=3
  target=$(echo "$i" | sed -r "s/-//; :r;s/\b[0-9]{1,$((N - 1))}\b/0&/g;tr; s/$/.json/")
  echo mv -v -- "$i" "$target"
  mv -v -- "$i" "$target"
done

额外优化

可以把多个sed命令合并为一个,减少管道调用,提升效率:

  • 合并s/-//、补零逻辑和添加.json后缀的操作到单个sed命令中,避免多次启动sed进程。

为什么手动执行没问题?

手动输入mv -v -- "-0" 000.json时,bash会解析双引号,把-0作为纯文件名参数传递给mv;但脚本里的"\"""$i""\""写法,是把双引号作为参数的字面内容传递,相当于让mv去找名为"-0"(带引号)的文件,自然找不到。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.29 04:15:03