【问题标题】:Is it possible to List Azure Blobs Where Last Modified Date > Some Date是否可以列出上次修改日期 > 某个日期的 Azure Blob
【发布时间】:2017-11-30 08:44:08
【问题描述】:

是否可以列出容器上上次修改日期大于指定日期的所有 blob。

我有一个包含数百万 blob 的容器,并且想要将这些 blob 复制到备份容器中,但不想遍历所有 blob 检查每个 blob 的上次修改日期。

【问题讨论】:

标签: c# azure azure-blob-storage


【解决方案1】:

是否可以列出上次修改的容器上的所有 blob 日期大于指定日期。

截至今天,不可能这样做。 Blob 服务不提供查询功能。当您列出 Blob 时,Blob 服务将返回一个按 Blob 名称排序的列表。

不是现在,但如果您需要此功能,您可能希望通过在名称前加上年、月和日期来按日期组织 blob。然后,您可以要求 blob 服务返回以特定前缀开头的 blob 名称。如果你使用Azure App Service,请查看 Azure 应用服务的诊断数据如何存储在 blob 容器中。它确实按年、月和日期作为前缀。

【讨论】:

    【解决方案2】:

    可以使用 Powershell。请看下面的sn-p。

    $StorageAccountName = "AccountName" 
    $StorageAccountKey = "What_ever_your_key_is_123asdf5524523A=="
    $Context = New-AzureStorageContext -StorageAccountName $StorageAccountName -StorageAccountKey $StorageAccountKey
    $ContainerName = "Container"
    
    $Blobs = Get-AzureStorageBlob -Container $ContainerName -Context $Context `
    | Where-Object{$_.LastModified.DateTime -gt (Get-Date).Date}
    

    上述命令将从午夜开始获取当天的 blob。

    然后您可以使用Get-Date cmdlet 上的函数进一步缩小时间范围,如下所示。

    $Blobs = Get-AzureStorageBlob -Container $ContainerName -Context $Context `
    | Where-Object{$_.LastModified.DateTime -gt ((Get-Date).Date).AddDays(-1)}
    

    您也可以通过管道传递到Sort-Object cmdlet 来对任何属性进行排序(我在下面的示例中按日期排序)。

    $Blobs = Get-AzureStorageBlob -Container $ContainerName -Context $Context `
    | Where-Object{$_.LastModified.DateTime -gt (Get-Date).Date.AddDays(-1)} `
    | Sort-Object -Property Date
    

    【讨论】:

    • 最好将Get-AzureStorageBlob -Container $ContainerName -Context $Context 存储在自己的变量中,然后使用该变量通过管道传输到Where-Object{$_.LastModified.DateTime -gt (Get-Date).Date}。否则,如果对Get-AzureStorageBlob 的调用需要很长时间才能运行并且您发现您使用了错误的日期,您将自责。
    【解决方案3】:

    如果您查看REST API documentation,则没有过滤日期/时间的参数。因此,这样做的唯一方法是列出所有 blob,然后按您的标准过滤(这也由 Mustafa Salmans 回答完成),或者按照 Gaurav Mantri 已经写的那样按日期组织 blob。

    【讨论】:

      【解决方案4】:

      这就是我在 Java 中的做法。它打印在最后一天修改的 blob。我确信 C# 等效项非常相似:

      
      BlobServiceClient blobServiceClient = new BlobServiceClientBuilder().endpoint("https://youraccount.blob.core.windows.net").sasToken("yourtoken").buildClient();
      BlobContainerClient blobContainerClient = blobServiceClient.getBlobContainerClient("yourcontainer");
      
      BlobListDetails details = new BlobListDetails().setRetrieveMetadata(true);
      ListBlobsOptions options = new ListBlobsOptions().setPrefix("yourprefix").setDetails(details);
      
      blobContainerClient.listBlobs(options, null).stream().filter(blob ->  blob.getProperties().getLastModified().isAfter(OffsetDateTime.now().minusDays(1))).forEach(blob -> System.out.printf("Name: %s %s%n", blob.getName(), blob.getProperties().getLastModified()));
      

      【讨论】:

        猜你喜欢
        • 2023-03-04
        • 2022-07-07
        • 2016-11-14
        • 2017-05-20
        • 2011-07-12
        • 1970-01-01
        • 1970-01-01
        • 2011-04-06
        • 2017-11-19
        相关资源
        最近更新 更多