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

单行移除字符串末尾n字符及终端批量修改文件名方案

嘿,刚好你懂bash和Python,那我就从这两个方向给你讲清楚怎么解决这个批量重命名问题,还有你关心的「终端里移除字符串末尾n个字符」的通用方法~

针对你的批量重命名需求(.jpg.png → .png)

方法1:用bash的rename命令(最简洁)

如果你用的是Debian/Ubuntu这类系统(自带Perl版本的rename),直接一行命令就能搞定:

rename 's/\.jpg\.png$/.png/' *.jpg.png

解释:正则表达式\.jpg\.png$精准匹配文件名末尾的.jpg.png,替换成.png,高效又省心。

方法2:bash循环+字符串截取(满足你想了解的末尾截取需求)

如果你的系统没有Perl版rename,或者想手动实现字符串截取逻辑,可以用bash循环:

for file in *.jpg.png; do
    # ${file:0:-8} 表示取文件名从开头到倒数第8个字符(去掉最后8个字符)
    mv "$file" "${file:0:-8}.png"
done

这里的.jpg.png正好是8个字符,所以用:-8去掉最后8位,再拼接.png就得到了目标文件名。

通用:终端(bash)中移除字符串末尾n个字符的方法

bash本身支持字符串切片操作,核心语法有两种:

  • 固定n值:${字符串变量:0:-n}
    举个例子:
    my_str="hello_bash_123"
    echo "${my_str:0:-4}"  # 输出 "hello_bash",去掉了最后4个字符"_123"
    
  • n是变量的情况(兼容旧版bash):${字符串变量:0:${#字符串变量}-n}
    先通过${#字符串变量}获取字符串总长度,再减去n得到截取的长度:
    n=5
    my_str="test_example"
    echo "${my_str:0:${#my_str}-$n}"  # 输出 "test_ex",去掉最后5个字符"ample"
    
    要是你用的是bash 4.0及以上版本,还可以简化成${字符串变量::-n},和Python的[:-n]语法几乎一致~
Python实现方式(你熟悉的思路)

既然你懂Python,写个小脚本也很方便,完全用你提到的[:-8]思路:

import os

# 遍历当前目录下的所有文件
for filename in os.listdir("."):
    # 筛选出以.jpg.png结尾的文件
    if filename.endswith(".jpg.png"):
        # 去掉最后8个字符,拼接新后缀.png
        new_filename = filename[:-8] + ".png"
        os.rename(filename, new_filename)

通用移除末尾n个字符的话,Python的str[:-n]就直接能用,和你想的一样简单。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 09:09:29