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

请求优化Bash脚本:批量处理文件并上传至Azure Blob后归档

批量处理文件并上传Azure Blob的脚本优化

需求背景

有一个文件夹会生成以下格式的文件:

  • Delhi_20221234556.csv
  • Melbourne_20123456789.csv
  • Goa_1234567890.csv
  • Sydney_2022345689.csv

需要完成三个核心操作:

  1. 移除文件名中的数字后缀,保留城市名+csv后缀(如Delhi_20221234556.csv→Delhi.csv)
  2. 将处理后的文件上传至Azure Blob存储
  3. 上传成功后,将文件移动到归档文件夹并添加日期后缀(如Delhi.csv→Delhi_2024-05-20.csv)

目前仅实现了针对Goa开头文件的处理脚本,需要优化为批量处理所有符合格式的文件。原脚本如下:

#!/bin/bash
find /abc/def -type f -name 'Goa*' -execdir bash -c 'for f in "$@"; 
do mv "$f" "${f%%_*}.csv"; 
done' bash {} +
./azcopy cp "/abc/def/Goa.csv" "https://<Blobaccount>.blob.core.windows.net/abc\home\xyz?<SAS- Token>"
mv /abc/def/Goa.csv /abc/def/Archive/Goa$(date +%F).csv

优化后的批量处理脚本

#!/bin/bash

# 配置基础路径和Azure Blob地址
BASE_DIR="/abc/def"
ARCHIVE_DIR="${BASE_DIR}/Archive"
BLOB_UPLOAD_URL="https://<Blobaccount>.blob.core.windows.net/abc/home/xyz?<SAS-Token>"

# 确保归档目录存在,不存在则创建
mkdir -p "${ARCHIVE_DIR}"

# 遍历所有符合「城市名_数字串.csv」格式的文件
find "${BASE_DIR}" -maxdepth 1 -type f -name '*_*.csv' | while read -r source_file; do
    # 提取文件名中的城市名(下划线前的部分)
    city=$(basename "${source_file}" | cut -d'_' -f1)
    processed_file="${BASE_DIR}/${city}.csv"

    # 重命名文件,移除数字部分
    mv "${source_file}" "${processed_file}"

    # 上传到Azure Blob,检查上传结果
    if ./azcopy cp "${processed_file}" "${BLOB_UPLOAD_URL}"; then
        # 上传成功,移动到归档目录并添加日期后缀
        archive_file="${ARCHIVE_DIR}/${city}_$(date +%F).csv"
        mv "${processed_file}" "${archive_file}"
        echo "处理完成:${processed_file} → ${archive_file}"
    else
        # 上传失败,恢复原文件名避免数据丢失
        echo "上传失败:${processed_file},已恢复原文件名"
        mv "${processed_file}" "${source_file}"
    fi
done

优化点说明

  • 批量匹配:用*_*.csv匹配所有符合格式的文件,不再局限于特定城市前缀
  • 动态提取城市名:通过basename和cut自动解析文件名,无需硬编码城市名称
  • 错误容错:只有当azcopy上传成功时才执行归档操作,失败则恢复原文件,避免数据异常
  • 参数化配置:把路径和Blob地址定义为变量,后续修改更方便
  • 目录预检查:用mkdir -p确保归档目录存在,避免移动文件时出错

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 18:01:13