从Azure Blob下载特定文件的列表



我从Azure Blob容器下载文件时遇到了一个问题。这并不像看起来那么微不足道。我看到了很多下载一个文件的例子,但是如果你需要下载大量的文件,那就有问题了。

问题定义:

  • 我有一个Azure Blob容器,里面有~30k个文件
  • 同时,我有一个确切的文件名本地列表(大约300个文件),我想从Azure Blob容器下载(即,我需要下载一大堆文件有选择地,通过他们的名字)

我知道所有这些文件存在于给定的blob中。因此,我需要一种方法来遍历文件列表并从blob下载它们。

What I tried:

  • 我尝试了'azcopy copy'命令。如果你需要将一个或几个文件从blob复制到本地磁盘,它可以正常工作,但是你无法将一个庞大的文件列表作为参数来下载那些
  • 试图搜索PowerShell的例子,可以做同样的事情,但没有运气

请建议。

请尝试如下操作。它利用Get-AzStorageBlobContentCmdlet。

这个想法是有一个你想要下载的blob数组,然后循环遍历该数组,并为每个项目调用这个Cmdlet。

$accountName = "account-name"
$accountKey = "account-key"
$containerName = "container-name"
$context = New-AzStorageContext -StorageAccountName $accountName -StorageAccountKey $accountKey
$destination = "C:temp"
$blobNames = @("blob1.txt", "blob2.txt", "blob3.txt", "blob4.txt")
For ($i=0; $i -lt $blobNames.Length; $i++) {
$blob = $blobNames[$i]
Write-Host "Downloading $blob. Please wait."
Get-AzStorageBlobContent -Blob $blob -Container $containerName -Destination $destination -Context $context -Verbose
}

您尝试过"Azure存储资源管理器"吗?软吗?多亏了它,我才能从blob存储中下载整个文件夹。

如果blob容器中的数据在文件夹中,只需右键单击文件夹>下载。

如果文件直接位于容器的根目录(而不是存储在子文件夹中),则必须使用" select all>选择所有文件。选择cache"中的所有文件选项,然后点击"下载"。

$accountName = "account-name"
$accountKey = "account-key"
$containerName = "container-name"
$context = New-AzStorageContext -StorageAccountName $accountName -StorageAccountKey $accountKey
$destination = "C:temp"
$blobNames = Get-Content $destinationlist.txt
For ($i=0; $i -lt $blobNames.Length; $i++) {
$blob = $blobNames[$i]
Write-Host "Downloading $blob. Please wait."
Get-AzStorageBlobContent -Blob $blob -Container $containerName -Destination $destination -Context $context -Verbose
}

它会像魅力一样工作,因为包含您需要下载的blob的文件名列表的文本文件位于"$destination"目录中(尽管可以是PC上的任何目录)。注:文件只需要列成一列(用一个回车符分隔,即"n"(在每个文件名的末尾)。谢谢@Gaurav Mantri的解决方案。

最新更新