列出容器中的目录

时间:2016-06-09 10:39:22

标签: azure azure-storage-blobs azure-powershell

如何获取容器中的目录列表?

我可以使用Get-AzureStorageBlob获取所有blob并按不同的前缀/名称/进行过滤,但是数百万个blob可能会很慢。

在PowerShell中有没有一种正确的方法来实现这一目标?

2 个答案:

答案 0 :(得分:3)

没有目录的概念,只有容器和blob。 blob名称可能具有看起来像目录的分隔符,并且可能已过滤

如果您选择在容器中存储数百万个blob,那么即使使用分隔符过滤,您也将搜索数百万个blob名称,无论是使用PowerShell,SDK还是直接REST调用。

就“正确”方式而言:没有正确的方法:只有您可以决定如何组织容器和blob,以及选择存储元数据的位置(或 if )以提高效率搜索(例如数据库)。

答案 1 :(得分:1)

另一个答案是正确的,因为文件夹中没有任何东西,所以没有开箱即用的东西,而是只有包含路径之类的文件夹的文件名。

在PowerShell中使用正则表达式可以找到顶级文件夹。如前所述,如果您的帐户中有数百万个商品,这可能会很慢,但对于少数商品,可能会为您服务。

$context = New-AzureStorageContext -ConnectionString '[XXXXX]'
$containerName = '[XXXXX]'

$blobs = Get-AzureStorageBlob -Container $containerName -Context $context 
$folders = New-Object System.Collections.Generic.List[System.Object]

foreach ($blob in $blobs)
{        

    if($blob.Name -match '^[^\/]*\/[^\/]*$')
    {
        $folder = $blob.Name.Substring(0,$blob.Name.IndexOf("/"));
        if(!$folders.Contains($folder))
        {
            $folders.Add($folder)
        }
    }      
}  

foreach ($folder in $folders)
{
    Write-Host $folder
}