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

如何编写Bash脚本批量重命名指定目录下的各类文件?

Bash脚本实现批量重命名文件为「前缀_序号.原扩展名」

直接给你可以运行的完整脚本,解决你的批量重命名需求:

#!/bin/bash

# 检查参数数量是否正确
if [ $# -ne 2 ]; then
    echo "用法: $0 <自定义前缀> <目标目录>"
    exit 1
fi

prefix="$1"
target_dir="$2"

# 验证目标目录是否存在
if [ ! -d "$target_dir" ]; then
    echo "错误: 目标目录 $target_dir 不存在"
    exit 1
fi

orderCount=1

# 遍历目标目录下的所有普通文件(跳过子目录)
for file in "$target_dir"/*; do
    if [ -f "$file" ]; then
        # 提取文件名(去掉路径)
        filename=$(basename "$file")
        # 提取文件扩展名(最后一个.后面的部分)
        extension="${filename##*.}"
        
        # 处理无扩展名的文件
        if [ "$filename" = "$extension" ]; then
            new_name="${prefix}_${orderCount}"
        else
            new_name="${prefix}_${orderCount}.${extension}"
        fi
        
        # 执行重命名,-v参数显示操作过程
        mv -v "$file" "$target_dir/$new_name"
        # 计数器递增
        ((orderCount++))
    fi
done

echo "重命名完成,共处理 $((orderCount-1)) 个文件"

你的伪代码里的几个关键问题修正:

  • 计数器位置错误:你把orderCount=1写在循环内部,导致每次循环都会重置为1,必须把它放在循环外面才能保证序号连续递增。
  • 遍历路径错误:for file in $2只会遍历目录名本身,而不是目录下的文件,正确写法是"$target_dir"/*,加引号是为了处理文件名包含空格的情况。
  • 扩展名提取缺失:用${filename##*.}可以精准提取文件的扩展名(如果文件没有扩展名,这个值会等于文件名本身,我们专门做了判断处理)。
  • 变量引用未加引号:文件名如果包含空格、特殊字符,不加引号会导致mv命令出错,所有变量引用都要加上双引号。
  • 缺少参数和目录校验:脚本加入了参数数量检查和目录存在性验证,避免用户误操作。

使用方法:

  1. 把上面的代码保存为rename_files.sh
  2. 赋予执行权限:chmod +x rename_files.sh
  3. 运行脚本:./rename_files.sh droneProject /path/to/your/directory

这样就能把目标目录下的所有文件重命名为droneProject_1.txt、droneProject_2.png这类格式,无扩展名的文件会变成droneProject_3这种形式。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 07:26:08