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

如何将Azure存储账户数据复制到另一账户并按修改日期归档

实现Azcopy按文件最后修改日期分层复制Azure Blob存储文件

原Azcopy命令仅能镜像源容器的目录结构,无法直接按文件最后修改日期在目标容器创建年/月/日层级路径。要实现需求,需结合脚本枚举源文件并逐个复制到构造好的目标路径,以下提供两种环境的实现方案:

PowerShell 方案

适用于Windows环境,需依赖Azure PowerShell模块:

# 首次运行需安装Az模块(取消注释执行)
# Install-Module -Name Az -Scope CurrentUser -Repository PSGallery -Force

# 登录Azure账户
Connect-AzAccount

# 配置存储账户与容器参数
$sourceStorageAccountName = "mysourceaccount"
$sourceContainerName = "mycontainer"
$destStorageAccountName = "mydestinationaccount"
$destContainerName = "mycontainer"

# 获取源存储账户上下文
$sourceContext = (Get-AzStorageAccount -Name $sourceStorageAccountName).Context

# 枚举源容器内所有Blob
$blobs = Get-AzStorageBlob -Container $sourceContainerName -Context $sourceContext

# 遍历Blob并按修改日期分层复制
foreach ($blob in $blobs) {
    # 提取UTC最后修改日期的年、月、日(月份/日期补零)
    $lastModified = $blob.LastModified.UtcDateTime
    $year = $lastModified.Year
    $month = $lastModified.Month.ToString("00")
    $day = $lastModified.Day.ToString("00")

    # 构造目标Blob路径
    $destBlobPath = "$year/$month/$day/$($blob.Name)"

    # 生成源和目标URL(需确保Azcopy已通过`azcopy login`获取权限,或URL包含SAS令牌)
    $sourceUrl = $blob.ICloudBlob.Uri.AbsoluteUri
    $destUrl = "https://$destStorageAccountName.blob.core.windows.net/$destContainerName/$destBlobPath"

    # 执行单个Blob复制
    azcopy copy "$sourceUrl" "$destUrl"
}

注意事项

  • 确保Azcopy已配置权限:可通过azcopy login登录Azure,或在源/目标URL后追加SAS令牌
  • 大量文件复制时,可考虑添加并行处理逻辑,但需注意Azure存储账户的请求限额
  • 若源文件包含特殊字符,需确保路径转义处理正确

Bash 方案

适用于Linux/WSL环境,需依赖Azure CLI:

# 首次运行需登录Azure(取消注释执行)
# az login

# 配置存储账户与容器参数
SOURCE_STORAGE_ACCOUNT="mysourceaccount"
SOURCE_CONTAINER="mycontainer"
DEST_STORAGE_ACCOUNT="mydestinationaccount"
DEST_CONTAINER="mycontainer"

# 枚举源容器内所有Blob的名称与UTC最后修改日期,循环处理
az storage blob list --account-name $SOURCE_STORAGE_ACCOUNT --container-name $SOURCE_CONTAINER --query "[].{name:name, lastModified:lastModified}" -o tsv | while read -r BLOB_NAME LAST_MODIFIED; do
    # 解析日期字符串,提取年、月、日
    YEAR=$(echo $LAST_MODIFIED | cut -d'-' -f1)
    MONTH=$(echo $LAST_MODIFIED | cut -d'-' -f2)
    DAY=$(echo $LAST_MODIFIED | cut -d'T' -f1 | cut -d'-' -f3)

    # 构造目标Blob路径
    DEST_BLOB_PATH="$YEAR/$MONTH/$DAY/$BLOB_NAME"

    # 生成源和目标URL(需确保Azcopy已登录或URL包含SAS令牌)
    SOURCE_URL="https://$SOURCE_STORAGE_ACCOUNT.blob.core.windows.net/$SOURCE_CONTAINER/$BLOB_NAME"
    DEST_URL="https://$DEST_STORAGE_ACCOUNT.blob.core.windows.net/$DEST_CONTAINER/$DEST_BLOB_PATH"

    # 执行单个Blob复制
    azcopy copy "$SOURCE_URL" "$DEST_URL"
done

注意事项

  • 确保Azure CLI与Azcopy已安装并配置环境变量
  • 若Blob数量极大,需使用--max-items和--next-token参数分页枚举,避免输出溢出
  • 如需使用本地时间而非UTC,需额外添加时区转换逻辑

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.04 02:13:13