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

Bash脚本实现文件名日期替换与版本号自动递增

Bash脚本:日期前缀替换+版本号递增(解决文件覆盖问题)

核心功能实现

搞定两个核心需求:自动把文件名前缀换成当日日期,同时从已有版本号接着往上递,适配.md/.pdf等多种文件类型,还彻底解决文件覆盖的坑。

完整脚本

#!/bin/bash

# 生成当日标准日期(YYYY-MM-DD)
TODAY=$(date +%Y-%m-%d)

# 处理传入的所有文件
for file in "$@"; do
    # 跳过目录,只处理文件
    [ -d "$file" ] && continue

    # 提取文件后缀(自动适配各种格式)
    ext="${file##*.}"
    # 剥离后缀后的文件名主体
    base_no_ext="${file%.*}"

    # 解析原文件名,分离日期、核心名称、版本号
    if [[ "$base_no_ext" =~ ^([0-9]{4}-[0-9]{2}-[0-9]{2})[[:space:]]+(.*)[[:space:]]+V\.([0-9]+)$ ]]; then
        # 匹配带旧日期前缀的格式:2023-09-12 Name V.32
        old_date="${BASH_REMATCH[1]}"
        name_core="${BASH_REMATCH[2]}"
        current_ver="${BASH_REMATCH[3]}"
    elif [[ "$base_no_ext" =~ ^(.*)[[:space:]]+V\.([0-9]+)$ ]]; then
        # 匹配无日期前缀但带版本号的格式:Name V.32
        name_core="${BASH_REMATCH[1]}"
        current_ver="${BASH_REMATCH[2]}"
        old_date=""
    else
        # 无版本号的文件,默认从版本1开始
        name_core="$base_no_ext"
        current_ver=0
        old_date=""
    fi

    # 查找当前目录下,同核心名称、当日日期前缀的所有文件,提取最大版本号
    max_ver=0
    while IFS= read -r -d '' existing_file; do
        if [[ "$existing_file" =~ ^\./${TODAY}[[:space:]]+${name_core}[[:space:]]+V\.([0-9]+)\.$ext$ ]]; then
            ver="${BASH_REMATCH[1]}"
            (( ver > max_ver )) && max_ver="$ver"
        fi
    done < <(find . -maxdepth 1 -type f -name "${TODAY} ${name_core} V.*.${ext}" -print0)

    # 确定新版本号:取「原版本+1」和「已有最大版本+1」中的较大值,避免覆盖
    new_ver=$(( current_ver + 1 > max_ver + 1 ? current_ver + 1 : max_ver + 1 ))

    # 拼接新文件名
    new_file="${TODAY} ${name_core} V.${new_ver}.${ext}"

    # 执行重命名,-v参数显示操作详情
    mv -v "$file" "$new_file"
done

关键逻辑说明

  1. 日期统一:用date +%Y-%m-%d生成标准格式日期,确保所有文件前缀格式一致
  2. 多格式适配:自动提取文件后缀,不用单独配置支持的文件类型
  3. 版本号安全递增:
    • 先解析原文件的当前版本号
    • 扫描目录里所有同核心名称的当日日期文件,找到已存在的最大版本号
    • 最终新版本号取两者加一后的较大值,彻底避免覆盖已有文件
  4. 兼容多种文件名格式:支持带旧日期前缀、无日期前缀但带版本号、无版本号三种格式的文件

测试场景验证

  • 现有文件:2023-09-12 Name V.32.md 和 2023-09-13 Name V.33.md
  • 执行脚本:./script.sh "2023-09-12 Name V.32.md"
  • 结果:生成2023-09-13 Name V.34.md,不会覆盖已有的V.33文件

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 21:50:21