如何获取容器中的目录列表?
我可以使用Get-AzureStorageBlob
获取所有blob并按不同的前缀/名称/进行过滤,但是数百万个blob可能会很慢。
在PowerShell中有没有一种正确的方法来实现这一目标?
答案 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
}