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

如何在Bash中移除文件的所有扩展名(获取第一个点前内容)?

提取文件名中第一个点之前的部分

现有代码仅能移除最后一个扩展名:

x=./gandalf.tar.gz
noext=${x%.*}
echo $noext  # 输出 ./gandalf.tar

如果需要获取第一个.之前的部分(无论后续有多少层扩展名,比如./gandalf.tar.a.b.c也要得到./gandalf),可以使用最长匹配的参数替换:

x=./gandalf.tar.gz
noext=${x%%.*}
echo $noext  # 输出 ./gandalf

x=./gandalf.tar.a.b.c
noext=${x%%.*}
echo $noext  # 输出 ./gandalf

原理说明

  • ${x%.*}:属于最短匹配删除,从字符串末尾匹配最短的.*,仅移除最后一个扩展名;
  • ${x%%.*}:属于最长匹配删除,从字符串末尾匹配最长的.*,会移除第一个.之后的所有内容,完全匹配你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 01:25:18