如何快速跨存储账户迁移指定格式的Blob容器JSON文件
高效迁移符合条件的Azure Blob文件方案
针对跨存储账户迁移命名为yyyymmdd-hhmmss.json、早于2022年1月1日的嵌套Blob文件需求,以下是几种高效的一次性实现方案:
1. AzCopy(推荐,高效批量传输)
AzCopy是Azure官方的批量存储传输工具,支持多线程、断点续传,最适合大规模文件迁移场景。
核心逻辑
利用文件名前缀(yyyymmdd)或Blob创建时间筛选目标文件,递归遍历嵌套文件夹完成迁移。
命令示例
基于文件名筛选(文件名与创建时间一致时优先用)
azcopy copy "https://<源存储账户>.blob.core.windows.net/<源容器>?<源SAS令牌>" "https://<目标存储账户>.blob.core.windows.net/<目标容器>?<目标SAS令牌>" \ --include-pattern "200[0-9]*.json;201[0-9]*.json;2020*.json;2021*.json" \ --recursive \ --parallel-threads=64
--include-pattern:匹配所有2000-2021年开头的JSON文件(即早于20220101)--recursive:遍历所有嵌套文件夹--parallel-threads:手动调高线程数提升传输速度(默认自动适配)
基于Blob创建时间筛选(文件名与创建时间不一致时用)
azcopy copy "https://<源存储账户>.blob.core.windows.net/<源容器>?<源SAS令牌>" "https://<目标存储账户>.blob.core.windows.net/<目标容器>?<目标SAS令牌>" \ --include-before "2022-01-01T00:00:00Z" \ --recursive \ --log-level=INFO
--include-before:筛选所有UTC时间2022年1月1日0点前创建的Blob--log-level=INFO:生成详细日志,方便排查迁移异常
优化点
- 若迁移中断,重新运行命令会自动续传已完成的文件
- 优先使用SAS令牌而非账户密钥,降低权限风险
2. Azure PowerShell脚本(适合复杂筛选逻辑)
如果需要更灵活的筛选规则(比如同时校验文件名格式和创建时间),可以用PowerShell脚本实现。
步骤与代码
- 安装并导入Az.Storage模块:
Install-Module -Name Az.Storage -Force -AllowClobber Import-Module Az.Storage
- 登录Azure并获取存储上下文:
Connect-AzAccount $sourceContext = (Get-AzStorageAccount -ResourceGroupName <源资源组> -Name <源存储账户>).Context $targetContext = (Get-AzStorageAccount -ResourceGroupName <目标资源组> -Name <目标存储账户>).Context
- 筛选并迁移符合条件的Blob:
$cutoffDate = Get-Date "2022-01-01" # 遍历所有Blob,筛选文件名格式正确且日期早于截止日期的文件 Get-AzStorageBlob -Container <源容器> -Context $sourceContext -Recurse | Where-Object { $_.Name -match '^\d{8}-\d{6}\.json$' -and ([datetime]::ParseExact($_.Name.Substring(0,8), 'yyyyMMdd', $null) -lt $cutoffDate) } | ForEach-Object { # 异步复制(适合大批量),若需同步复制改用Copy-AzStorageBlob Start-AzStorageBlobCopy -SrcBlob $_.Name -SrcContainer <源容器> ` -DestContainer <目标容器> -Context $sourceContext -DestContext $targetContext }
优化点
- PowerShell 7+版本可添加
-Parallel参数实现并行复制,大幅提升效率 - 可添加进度条或日志输出,实时监控迁移状态
3. Azure Logic Apps(无代码方案)
若不想编写代码,可通过Logic Apps实现无代码迁移,适合中小规模文件场景。
操作步骤
- 创建一个空白Logic App,选择Recurrence触发器,设置为一次性执行(比如立即运行一次)
- 添加List blobs操作,选择源存储账户和容器,开启递归选项
- 添加Filter array操作,设置筛选条件:
- 条件1:Blob文件名匹配正则表达式
^\d{8}-\d{6}\.json$ - 条件2:提取文件名前8位转换为日期后,小于
2022-01-01(或直接用Blob创建时间筛选)
- 条件1:Blob文件名匹配正则表达式
- 对筛选后的每个Blob,添加Copy blob操作,选择目标存储账户和容器
- 保存并运行Logic App,完成迁移
注意事项
- 大规模文件迁移时,需调整Logic App的并发限制(默认并发数有限)
- 可添加错误处理步骤,捕获迁移失败的文件
内容的提问来源于stack exchange,提问作者Zodi
相关产品推荐
相关产品推荐

