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

在Bash中批量移除多余文件扩展名

解决带空格文件名的.temp扩展名移除问题

你的脚本之所以在文件名含空格时失效,核心问题是没给basename的输出结果加双引号。当文件名有空格时,$(basename "$f" .temp)展开后会被Shell按空格拆分成多个参数,mv就会把后面的部分误判为目标目录,自然执行出错。

最简单的修复方式就是给basename的结果套上双引号,让Shell把整个文件名当作一个完整的参数处理:

for f in *; do mv "$f" "$(basename "$f" .temp)"; done

不过我更推荐一种更高效的写法——直接用Shell自带的参数扩展功能,不用调用外部的basename命令:

for f in *.temp; do mv "$f" "${f%.temp}"; done

这里的几个关键点:

  • *.temp:只遍历带.temp后缀的文件,避免处理不需要修改的文件,减少无用操作
  • ${f%.temp}:这是Shell的参数扩展语法,作用是从变量f的末尾移除最短的.temp匹配串,完美实现移除扩展名的需求,而且完全在Shell内部处理,不会有空格或特殊字符的问题

两种方法都能解决你的问题,第二种更符合Shell脚本的最佳实践,执行效率也更高~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 14:38:13