azure - Powershell 代码将 Blob 内容的所有子文件夹下载到本地到单个文件夹中
问题描述
场景说明 - 以前我尝试使用 PS 代码针对特定的 blob 路径文件夹和日期参数化进行将 blob 内容下载到本地的活动。现在工作正常。但是需要进行如下更改-当然欢迎提出想法,以便我可以推动它。我在 blob 路径中有多个子文件夹假设 - A/B/C、C 有文件夹 1、文件夹 2 等。我如何使用 PS 代码将所有内容放在一个文件夹中。现在,在 C 中,具有多个 blob 内容的子文件夹正在下载为一个文件夹,假设为 -00,01,02,就像 blob 中可用的内容一样。
解决方案
更新 0327:
下面的代码会将每个文件下载到每个文件夹中:
$container_name="test10"
$destination_path="d:\ccc"
$user="xxx"
$pwd = "xxxxxx"
$context = New-AzStorageContext -StorageAccountName $user -StorageAccountKey $pwd
$path = "A/B"
#$date = (get-date).AddDays(-1).ToString("yyyy-MM-dd")
$date="2020-03-24"
$blobs = Get-AzStorageBlob -Container $container_name -Prefix "$path/$date" -Context $context
$i=0
foreach($blob in $blobs )
{
$blobName = $blob.Name -split "/" | select -Last 1
Write-Output "downloading blob $blobName"
$finalDirectory = New-Item -ItemType Directory -Force -Path "$($destination_path)\$i"
$finalPath = "$($finalDirectory)\$($blobName)"
$blob.ICloudBlob.DownloadToFile($finalPath,[System.IO.FileMode]::CreateNew)
$i=$i+1
}
Write-Output "***completed downloading***"
原答案:
如果您使用Get-AzStorageBlobContent
cmdlet 下载 blob,则无法更改结构。
但是您可以使用$blob.ICloudBlob.DownloadToFile
的方法$blob object
,它可以满足您的要求:
示例代码(我自己测试,所有的blob,包括子文件夹中的blob都下载到本地一个文件夹中):
$container_name="test10"
$destination_path="d:\ccc"
$user="storage_account_name"
$pwd = "storage_account_key"
$context = New-AzStorageContext -StorageAccountName $user -StorageAccountKey $pwd
$path = "A/B"
$date = (get-date).AddDays(-1).ToString("yyyy-MM-dd")
$blobs = Get-AzStorageBlob -Container $container_name -Prefix "$path/$date" -Context $context
foreach($blob in $blobs )
{
#get the name by removing the directory/folder name of a blob
$blobName = $blob.Name -split "/" | select -Last 1
Write-Output "downloading blob $blobName"
$finalPath = "$($destination_path)\$($blobName)"
$blob.ICloudBlob.DownloadToFile($finalPath,[System.IO.FileMode]::CreateNew)
}
Write-Output "***completed downloading***"
如果您还有更多问题,请告诉我。
推荐阅读
- java - 我可以将 Java 中的日期作为 TYPED INTO excel 单元格获取吗?
- asp.net-core - Chrome 将带有 304 状态代码响应的请求报告为已取消
- ios - 将 UIImage 保存到 PhotoLibrary Swift 4.2 iOS 12
- javascript - 如何将脚本 url 的结果存储在 Javascript 变量中
- php - 试图分割一个字符串
- pytorch - 在 PyTorch 中,是什么让张量具有非连续内存?
- api - 索尼 DSC-RX10M3 和方法“getCameraFunction”和“setCameraFunction”
- ascii - 十进制数字的字符代码表示
- java - 2.1.1.RELEASE 中 SpringBoot 中的 @Value
- grails - grails:一个字段,多个类