编写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
关键逻辑说明
- 目录检查:使用
mkdir -p确保目标目录存在,避免复制失败。 - 配置读取:通过
IFS=';'分割配置行字段,跳过空行和注释行。 - 流水号处理:计算流水号的起始与结束值,用
printf "%02d"保证流水号为两位数字(自动补零)。 - 重命名规则:使用字符串替换
${orig_file//$old_prefix/${new_prefix}_${formatted_seq}}将旧前缀替换为新前缀+流水号,生成目标文件名。 - 复制执行:循环执行
cp命令完成批量复制,并输出操作日志。
执行说明
- 将脚本保存为
batch_copy_rename.sh。 - 赋予执行权限:
chmod +x batch_copy_rename.sh。 - 确保配置文件
config_rename.txt与脚本同目录,或修改脚本中的CONF_FILE路径为绝对路径。 - 执行脚本:
./batch_copy_rename.sh。
内容的提问来源于stack exchange,提问作者Miss aya
相关产品推荐
相关产品推荐

