批量删除文件前的数字编号脚本

wen 实用脚本 1

本文目录导读:

批量删除文件前的数字编号脚本

  1. 使用方法
  2. 脚本功能详解
  3. 处理示例
  4. 自定义分隔符
#!/bin/bash
#批量删除文件名前的数字编号(如:01_、123- 等)
#功能:移除文件名开头的数字(及紧随其后的分隔符),保留其余部分
#用法:在包含待处理文件的目录中运行此脚本
set -euo pipefail
# 启用 extglob 以便使用更强大的模式匹配
shopt -s extglob
echo "将要处理当前目录下的文件..."
echo "操作:移除文件名开头的数字(及可选的分隔符如 _ - . 空格)"
echo "----------------------------------------"
count=0
# 遍历当前目录下的所有文件(不包含目录)
for file in *; do
    # 跳过目录
    [ -f "$file" ] || continue
    # 使用正则匹配:以数字开头,后面跟 0或多个分隔符,然后其他内容
    # 分隔符可以配置:_ - . 空格等
    if [[ "$file" =~ ^[0-9]+[_-.[:space:]]*(.*) ]]; then
        # 提取捕获组中的剩余文件名部分
        new_name="${BASH_REMATCH[1]}"
        # 如果新文件名为空(例如文件名为 "123_"),则保留原文件名并提示
        if [[ -z "$new_name" ]]; then
            echo "⚠ 跳过 '$file'(编号后无内容)"
            continue
        fi
        # 检查目标文件是否已存在
        if [[ -e "$new_name" ]]; then
            echo "⚠ 跳过 '$file' -> '$new_name'(目标已存在)"
            continue
        fi
        # 执行重命名
        if mv -n "$file" "$new_name"; then
            echo "✅ 重命名: '$file' -> '$new_name'"
            ((count++))
        else
            echo "❌ 重命名失败: '$file'"
        fi
    fi
done
echo "----------------------------------------"
echo "处理完成,共重命名 $count 个文件。"

使用方法

  1. 保存脚本:将上面的代码保存为 remove_number_prefix.sh
  2. 赋予执行权限chmod +x remove_number_prefix.sh
  3. 运行脚本:在包含待处理文件的目录中执行 ./remove_number_prefix.sh

脚本功能详解

  • 适用范围:移除文件名开头的数字及紧随其后的常见分隔符(、、、空格等)。
  • 安全机制
    • 跳过目录,只处理文件。
    • 如果重命名后的文件已存在,则跳过,避免覆盖。
    • 如果文件名只有数字和分隔符(如 123_),则跳过并提示。
  • 预览模式:如需先查看效果而不真正执行,可以将 mv -n 替换为 echo "[DRY RUN] mv '$file' '$new_name'"

处理示例

原始文件名 重命名后
01_报告.doc 报告.doc
2024-08-20_照片.jpg 照片.jpg
备份.tar 备份.tar
001 数据.csv 数据.csv
42_README.md README.md
abc.txt abc.txt(无变化)

自定义分隔符

如需调整支持的分隔符,修改脚本中的正则表达式 ^[0-9]+[_-.[:space:]]*(.*) 中的 [_-.[:space:]]* 部分。

  • 只移除数字和下划线:^[0-9]+_(.*)
  • 移除数字和连字符或点:^[0-9]+[-.](.*)

提示:建议先在测试目录中运行,确认效果后再用于重要文件。

抱歉,评论功能暂时关闭!