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

如何在Bash中为文件名的首个数字补零并保留其余内容

解决文件名首个数字段补零的可靠方案

别担心,我完全理解你不想破坏文件名里重要元数据的诉求!服务器上的rename工具经常有版本差异——很多默认装的是util-linux版的,和你笔记本上的Perl版语法完全不同,这就是问题所在。下面给你几个不破坏其他元数据的可行方案,按需选择:

方案1:用Bash原生工具(无需额外安装)

这个方案依赖Bash的正则匹配和printf,几乎所有Linux服务器都支持,最稳妥:

# 先测试:把mv换成echo,确认新文件名是否正确
for file in *.txt; do
    if [[ $file =~ ^(.+-)([0-9]+)(-.+\.txt)$ ]]; then
        prefix="${BASH_REMATCH[1]}"
        num="${BASH_REMATCH[2]}"
        suffix="${BASH_REMATCH[3]}"
        new_num=$(printf "%06d" "$num")
        new_name="${prefix}${new_num}${suffix}"
        echo "将重命名: $file → $new_name"
        # 确认无误后取消下面注释
        # mv "$file" "$new_name"
    fi
done

工作原理:

  • 遍历当前目录下所有.txt文件
  • 用正则把文件名拆成三部分:前缀(直到第一个数字前的-)、首个数字段、剩余后缀(包含所有元数据)
  • 用printf "%06d"把数字补到6位(你可以改成需要的位数,比如4位就写%04d)
  • 拼接成新文件名,安全重命名

方案2:用Python脚本(更灵活)

如果你的服务器装了Python(绝大多数都有),这个脚本更易读,也方便调整规则:

import os
import re

# 正则匹配:捕获首个数字段前后的内容,保留所有元数据
filename_pattern = re.compile(r'^(.+-)(\d+)(-.+\.txt)$')

for filename in os.listdir('.'):
    match_result = filename_pattern.match(filename)
    if match_result:
        prefix_part = match_result.group(1)
        number_part = match_result.group(2)
        suffix_part = match_result.group(3)
        # zfill(6) 自动补零到6位,改数字调整位数
        new_number = number_part.zfill(6)
        new_filename = f"{prefix_part}{new_number}{suffix_part}"
        # 先打印测试,确认后取消注释
        # os.rename(filename, new_filename)
        print(f"将重命名: {filename} → {new_filename}")

使用方法:

  1. 把上面的代码保存为rename_files.py
  2. 执行python rename_files.py测试输出
  3. 确认无误后,取消os.rename那行的注释再执行

方案3:如果能安装Perl版rename

如果服务器允许安装软件,你可以装回熟悉的Perl版rename(比如Debian/Ubuntu上是rename包,CentOS/RHEL上是prename),然后用你熟悉的命令:

# 测试:加上-n参数预览重命名结果
rename -n 's/(\d+)/sprintf("%06d", $1)/e' foo-*.txt
# 确认无误后去掉-n执行
rename 's/(\d+)/sprintf("%06d", $1)/e' foo-*.txt

关键提醒:

所有方案都先测试再执行,避免误改文件!用echo或者-n参数预览结果,确认新文件名完全符合预期后,再执行实际的重命名操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.30 13:48:11