方案: - 位于Azure存储中的备份 -Folder包含> 100,000个文件夹 - 每个文件夹的内部都是以下格式的文件:MM-DD-YYYY_randomnumber.wav.gz
我们需要从两个月(未知数量,可能是30,000-40,000)提取所有文件。
看起来AzCopy是我们完成此任务所需的实用程序。
以下命令是我想象它会如何工作,但我无法做到这一点:
AzCopy /Source:https://path.to.files/path/to/files /Dest:C:\test /SourceKey:key /Pattern:11-*-2016_*.wav.gz /S
以下抓取父文件夹(它的名称与其中的文件相同,只是没有.wav.gz扩展名),这不是理想的,但是可以使用。但是,这会抓取多年的文件:
AzCopy /Source:https://path.to.files/path/to/files /Dest:C:\test /SourceKey:key /Pattern:11 /S
我已经阅读了文档,并且它提到了通配符可以在某些情况下使用但不能在其他情况下使用,但我不完全确定它是什么意思。
谢谢!
答案 0 :(得分:1)
我知道这个问题早就有人问过了,但现在 azcopy 中有一个 --include-pattern 标志,它允许您创建更具体的通配符模式,就像原始帖子中建议的那样。
答案 1 :(得分:0)
不,这是不可行的。根据AzCopy关于/ Pattern选项的文件:
如果指定的源是blob容器或虚拟目录,则不应用通配符。如果指定了选项/ S,则AzCopy将指定的文件模式解释为blob前缀。如果未指定选项/ S,则AzCopy会将文件模式与精确的blob名称进行匹配。
答案 2 :(得分:0)
您不必使用Azcopy,使用AzureRM模块的几行powershell应该能够下载文件。 Altough我还没有用大量文件测试它。
使用PowerShell,您可以轻松编辑" blobnames"变量并使用通配符选择所需的正确文件夹和文件。 您选择的Azure存储帐户中的文件夹也将在本地驱动器上创建。
$blobnames = "somebackups/2016.*/11-*-2016_*.wav.gz"
以下代码非常自我解释。
$storageAccountName = "storage"
$storageAccountKey = "SuperLongKey"
$containerName = "backup"
$localDirectory = "c:/temp/stackoverflow"
$blobnames = "11-*-2016_*.wav.gz"
$ctx = New-AzureStorageContext -StorageAccountName $storageAccountName -StorageAccountKey $storageAccountKey
$blobsToDownload = Get-AzureStorageBlob -Context $ctx -blob $blobnames -Container $containerName
$blobsToDownload | Get-AzureStorageBlobContent -Destination $localDirectory