1

场景: - 位于 Azure 存储中的备份 - 包含 >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

我已经阅读了文档,它提到通配符可以在某些情况下使用,但不能在其他情况下使用,但我不完全确定它的含义。

谢谢!

4

3 回答 3

1

我知道这个问题早就有人问过了,但是现在 azcopy 中有一个 --include-pattern 标志,可以让您创建更具体的通配符模式,就像原始帖子中建议的那样。

于 2021-02-26T22:06:40.327 回答
0

你不必使用azcopy,使用AzureRM模块的几行powershell应该可以下载文件。 尽管我没有用大量文件测试过它。

使用 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
于 2017-06-07T13:04:21.890 回答
0

不,这是不可行的。根据有关 /Pattern 选项的 AzCopy 文档:

如果指定的源是 Blob 容器或虚拟目录,则不应用通配符。如果指定了选项 /S,则 AzCopy 将指定的文件模式解释为 blob 前缀。如果未指定选项 /S,则 AzCopy 将文件模式与确切的 blob 名称进行匹配。

于 2017-06-07T07:26:54.697 回答