【问题标题】:Upload multiple folders from local storage to Azure as new containers with folder contents将多个文件夹从本地存储上传到 Azure,作为包含文件夹内容的新容器
【发布时间】:2020-10-24 00:45:00
【问题描述】:

我们拥有包含 100 个容器的 Azure Blob 存储帐户。文件结构如下:

container_01 | --somemedia.jpg --anothermedia.jpg

container_02 | --secondcontainersmedia.jpg - 等等 --AndSoOnAndSoOn

我的客户希望将所有容器下载到本地存储,以便在必要时将它们重新上传到 Azure。在做了一些研究后,我发现了这个blog post。从那里更新脚本以满足我的需要(只是从 AzureRM 更新到 AZ 以及我的个人连接和本地路径),我想出了以下合适的脚本来下载文件。

$destination_path = 'C:\Storage Dump Test'
$connection_string = '[Insert Connection String]'

$storage_account = New-AzStorageContext -ConnectionString $connection_string

$containers = Get-AzStorageContainer -Context $storage_account

Write-Host 'Starting Storage Dump...'

foreach ($container in $containers)
{
    Write-Host -NoNewline 'Processing: ' . $container.Name . '...'

    $container_path = $destination_path + '\' + $container.Name

    if(!(Test-Path -Path $container_path ))
    {
        New-Item -ItemType directory -Path $container_path
    }

    $blobs = Get-AzStorageBlob -Container $container.Name -Context $storage_account

    Write-Host -NoNewline ' Downloading files...'    

    foreach ($blob in $blobs)
    {        
        $fileNameCheck = $container_path + '\' + $blob.Name
        
        if(!(Test-Path $fileNameCheck ))
        {
            Get-AzStorageBlobContent `
            -Container $container.Name -Blob $blob.Name -Destination $container_path `
            -Context $storage_account
        }            
    }  

    Write-Host ' Done.'
}

Write-Host 'Download complete.'

所以现在我的本地存储上有一个目录,其中包含数百个包含媒体项目的文件夹。我需要创建一个 PS 脚本(或找到其他方法)来基本上做相反的事情 - 获取该目录中的所有文件夹,使用文件夹名称创建容器,并将每个文件夹中的项目上传到适当的容器。

我应该如何开始?

【问题讨论】:

    标签: azure powershell azure-powershell


    【解决方案1】:

    使用 azcopy 而不是使用 azure cmdlet,您将获得更多、更快的成功。复制:

    azcopy copy '<local-file-path>' 'https://<storage-account-name>.<blob| dfs>.core.windows.net/<container-name>/<blob-name>'

    它还可以创建容器:

    azcopy make 'https://mystorageaccount.blob.core.windows.net/mycontainer'

    azcopy 可以下载整个容器,而无需指定每个文件。使用--recursive

    见:https://docs.microsoft.com/en-us/azure/storage/common/storage-use-azcopy-v10

    【讨论】:

    • 有没有办法使用 azcopy 对数百个文件夹及其内容执行此操作而无需手动操作?
    • 绝对!如果你给 azcopy 一个容器的名字,如果你使用--recursive 参数,它也会下载所有的内容。
    • 我查看了文档,也许我很密集,但我没有看到将多个文件夹作为容器上传的方法。如果我有本地文件夹 0000 - 0999,每个文件夹都有内容,我如何将它们上传到 Azure 并保留相同的结构(即本地文件夹 0000 变为容器 0000 等)。
    猜你喜欢
    • 2015-05-08
    • 2022-11-30
    • 1970-01-01
    • 1970-01-01
    • 2022-01-12
    • 1970-01-01
    • 1970-01-01
    • 2016-11-07
    • 1970-01-01
    相关资源
    最近更新 更多