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

编写Bash脚本:按配置文件批量复制并重命名文件

Bash脚本实现批量文件复制与规则重命名

以下是满足需求的完整脚本,可实现从指定源目录读取文件,按照配置文件规则批量复制并重命名:

#!/bin/bash

# 配置路径参数
SOURCE_DIR="/srv/test/"
DEST_DIR="/srv/rename/"
CONF_FILE="config_rename.txt"

# 确保目标目录存在,不存在则创建
mkdir -p "$DEST_DIR"

# 读取配置文件,逐行处理
while IFS=';' read -r orig_file copy_num start_seq old_prefix new_prefix || [[ -n "$orig_file" ]]; do
    # 跳过空行和以#开头的注释行
    [[ "$orig_file" =~ ^#.*$ || -z "$orig_file" ]] && continue

    # 拼接源文件完整路径
    src_file="${SOURCE_DIR}/${orig_file}"
    # 检查源文件是否存在,不存在则跳过
    if [[ ! -f "$src_file" ]]; then
        echo "[警告] 源文件 $src_file 不存在,跳过该行配置"
        continue
    fi

    # 计算流水号结束值
    end_seq=$((start_seq + copy_num - 1))

    # 循环执行复制与重命名
    for ((seq=start_seq; seq<=end_seq; seq++)); do
        # 将流水号格式化为两位数字(自动补零)
        formatted_seq=$(printf "%02d" "$seq")
        # 替换原文件名中的旧前缀为新前缀+流水号
        new_filename="${orig_file//$old_prefix/${new_prefix}_${formatted_seq}}"
        # 拼接目标文件路径
        dest_file="${DEST_DIR}/${new_filename}"
        # 执行复制操作
        cp "$src_file" "$dest_file"
        echo "[完成] 复制:$src_file -> $dest_file"
    done
done < "$CONF_FILE"

配置文件说明

根据你的需求,调整config_rename.txt的格式为原文件名;复制数量;起始流水号;要替换的旧前缀;新前缀(注:原描述存在字段顺序偏差,调整后更符合期望结果),示例配置如下:

AB-TEST-A1000000001_20230908005727724.tar;2;01;A1000000001;12
AC-ERROR-B1000000009_20230908005727724.tar;3;10;B1000000009;YX

关键逻辑说明

  1. 目录检查:使用mkdir -p确保目标目录存在,避免复制失败。
  2. 配置读取:通过IFS=';'分割配置行字段,跳过空行和注释行。
  3. 流水号处理:计算流水号的起始与结束值,用printf "%02d"保证流水号为两位数字(自动补零)。
  4. 重命名规则:使用字符串替换${orig_file//$old_prefix/${new_prefix}_${formatted_seq}}将旧前缀替换为新前缀+流水号,生成目标文件名。
  5. 复制执行:循环执行cp命令完成批量复制,并输出操作日志。

执行说明

  1. 将脚本保存为batch_copy_rename.sh。
  2. 赋予执行权限:chmod +x batch_copy_rename.sh。
  3. 确保配置文件config_rename.txt与脚本同目录,或修改脚本中的CONF_FILE路径为绝对路径。
  4. 执行脚本:./batch_copy_rename.sh。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 11:54:54