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

如何编写Bash脚本批量重命名目录中符合规则的文件

解决方案

方法一:通用Bash循环(兼容所有Linux发行版)

创建脚本文件rename_chapters.sh,内容如下:

#!/bin/bash

# 遍历当前目录下所有mp3文件
for file in *.mp3; do
  # 跳过非文件类型(比如目录)
  [ -f "$file" ] || continue

  # 第一步:删除"chapter_"之前的所有内容
  cleaned_file="${file#*chapter_}"
  cleaned_file="chapter_$cleaned_file"

  # 第二步:给单个数字章节号添加前导零
  final_file=$(echo "$cleaned_file" | sed -E 's/chapter_([0-9])_/chapter_0\1_/')

  # 仅当文件名有变化时执行重命名,避免重复操作
  if [ "$file" != "$final_file" ]; then
    mv -v "$file" "$final_file"
  fi
done

使用步骤:

  1. 将脚本放在音频文件所在目录
  2. 赋予执行权限:chmod +x rename_chapters.sh
  3. 运行脚本:./rename_chapters.sh

方法二:Perl版rename命令(快速一行完成)

适用于Debian/Ubuntu这类默认搭载Perl版rename的系统:

# 先预览重命名结果(仅测试,不实际修改文件)
rename -n 's/.*?(chapter_)/$1/; s/chapter_([0-9])_/chapter_0$1_/' *.mp3

# 确认结果正确后,去掉-n执行实际重命名
rename 's/.*?(chapter_)/$1/; s/chapter_([0-9])_/chapter_0$1_/' *.mp3

正则逻辑说明

  • s/.*?(chapter_)/$1/:非贪婪匹配chapter_之前的所有内容,替换为chapter_,实现前缀删除
  • s/chapter_([0-9])_/chapter_0$1_/:匹配chapter_后跟单个数字的场景,替换为chapter_0加该数字,补全前导零

注意事项

  • CentOS/RedHat等系统默认是util-linux版rename,语法不兼容,建议用方法一
  • 操作前建议备份文件,避免意外错误
  • 脚本已处理带空格的文件名,所有变量均用双引号包裹

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 09:00:41