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

请求编写Bash脚本:移除文件名两圆点间子串以重命名文件

批量重命名文件:移除两个圆点间的子串(修复重复扩展名问题)

问题分析

原脚本的参数展开逻辑存在错误,${file%%.*.*-*}的匹配规则无法精准识别第一个圆点到最后一个圆点之间的内容,且${file##*.}会无条件追加后缀,导致出现重复扩展名的问题。我们需要精准提取第一个圆点前的前缀和最后一个圆点后的后缀,再将二者拼接即可得到目标文件名。

修正后的脚本

#!/bin/bash
# 遍历当前目录下的jpg和txt文件
for file in *.jpg *.txt; do
    # 仅处理包含至少两个圆点的文件(确保有可移除的中间部分)
    if [[ "$file" == *.*.* ]]; then
        # 提取第一个圆点前的前缀
        prefix="${file%%.*}"
        # 提取最后一个圆点后的后缀
        suffix="${file##*.}"
        # 拼接新文件名
        new_file="${prefix}.${suffix}"
        # 执行重命名(加上-v参数可查看重命名过程,可选)
        mv -v "$file" "$new_file"
    fi
done

验证示例

  • 原文件名:AAAAAAAA.BBBBB-BBB.jpg → 处理后:AAAAAAAA.jpg
  • 原文件名:mmmmmmmmmm.vvv-yyyyy.txt → 处理后:mmmmmmmmmm.txt

关键说明

  • ${file%%.*}:从字符串末尾开始匹配最短的.*,即截取第一个圆点之前的所有内容
  • ${file##*.}:从字符串开头开始匹配最长的*.,即截取最后一个圆点之后的所有内容
  • 条件判断[[ "$file" == *.*.* ]]确保只处理包含至少两个圆点的文件,避免对单扩展名文件(如test.jpg)误操作
  • 给mv命令加上-v参数可以显示重命名的详细过程,方便调试

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 13:45:00