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

如何递归查询Azure存储容器仅获取目录列表以导出ACL?

快速获取Azure存储容器仅目录列表以导出ACL的解决方案

针对你需要获取Azure存储容器中仅目录列表并导出其ACL的需求,以下是高效的解决方案,避免全量遍历所有Blob带来的性能问题:

方法1:利用Blob存储REST API分层获取目录

当调用存储API时,通过delimiter=%2F参数让API自动分层返回目录结构,无需处理所有文件:

请求格式:

GET https://<存储账户名>.blob.core.windows.net/<容器名>?comp=list&prefix=<可选前缀>&maxresults=5000&restype=container&delimiter=%2F

关键说明:

  • delimiter=%2F是核心参数,它将路径中的/作为分隔符,API响应会将当前层级的子目录放在Prefixes节点中,而Blobs节点仅返回当前前缀下的非目录文件
  • 若需递归获取所有子目录,可循环将每个Prefix作为新的prefix参数再次调用API,逐层遍历目录结构

方法2:优化PowerShell命令分层递归

避免使用-Recurse全量拉取内容,改用分层递归方式仅获取目录:

function Get-AllDirectories {
    param(
        [string]$StorageAccountName,
        [string]$ContainerName,
        [string]$Prefix = ""
    )
    $ctx = New-AzStorageContext -StorageAccountName $StorageAccountName -UseConnectedAccount
    # 获取当前前缀下的目录和直接子项(仅取目录)
    $currentItems = Get-AzDataLakeGen2ChildItem -Context $ctx -Container $ContainerName -Prefix $Prefix -Delimiter "/"
    $currentItems.Directories

    # 递归处理每个子目录
    foreach ($dir in $currentItems.Directories) {
        Get-AllDirectories -StorageAccountName $StorageAccountName -ContainerName $ContainerName -Prefix ($dir.Name + "/")
    }
}

# 调用示例:获取所有目录并导出ACL
$storageAccount = "your-storage-account"
$container = "your-container"
$ctx = New-AzStorageContext -StorageAccountName $storageAccount -UseConnectedAccount

$allDirectories = Get-AllDirectories -StorageAccountName $storageAccount -ContainerName $container
$allDirectories | ForEach-Object {
    Get-AzDataLakeGen2Acl -Context $ctx -Container $container -Path $_.Name
} | Export-Csv -Path "directory-acls.csv" -NoTypeInformation

优势:

  • 仅拉取当前层级的目录,避免一次性加载数十万Blob,大幅提升速度
  • 自动处理分页(PowerShell cmdlet会自动处理续传令牌),无需手动管理

方法3:使用Azure CLI直接列出目录

Azure CLI提供了专门的目录列表命令,可直接递归获取所有目录:

# 递归列出所有目录
az storage blob directory list --account-name <存储账户名> --container-name <容器名> --recursive --output json

# 导出目录ACL示例
az storage blob directory list --account-name <存储账户名> --container-name <容器名> --recursive --query "[].name" --output tsv | while read dir; do
    az storage blob directory show-acl --account-name <存储账户名> --container-name <容器名> --path $dir --output json >> directory-acls.json
done

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 15:18:25