列出并恢复软删除的 blob - azure python

Posted

技术标签:

【中文标题】列出并恢复软删除的 blob - azure python【英文标题】:list and restore soft deleted blobs - azure python 【发布时间】:2019-04-01 17:00:07 【问题描述】:

我需要恢复容器中的多个 Blob。存储帐户已启用软删除 10 天。 我看到 here 了解如何取消删除,但我在目录中递归地有多个 blob 被软删除

但是我没有通过 python 找到here。

我需要在 python 中列出和取消删除 blob

【问题讨论】:

您好,我的回答对您有帮助吗? 【参考方案1】:

正如 Jay 所提到的,目前您无法告诉 Azure 存储 REST API 仅返回软删除的 blob。您需要做的是列出 Blob 容器中的所有 Blob,并要求 REST API 在列表中包含已删除的 Blob。

因此您将调用list_blobs 方法,并且对于该方法中的include 参数,您需要指定include.DELETED。返回的 Blob 列表将包括已删除的 Blob。

然后您将遍历 blob 并找出哪些 blob 处于软删除状态,并将使用 undelete_blob 取消删除它们。

您还提到您还删除了子文件夹中的 blob。要列出所有 blob,您需要将 delimiter 指定为空字符串。然后,您还将在子文件夹中获得 blob。

【讨论】:

【参考方案2】:

当然,您可以在Python Storage SDK 中找到与REST API 对应的sdk 方法。

from azure.storage.blob.baseblobservice import (
    BaseBlobService
)

accountName = "***"
accountKey = "***"
containerName = "***"
blobName = "***"

blobService = BaseBlobService(account_name=accountName, account_key=accountKey)

blobService.undelete_blob(containerName, blobName)

【讨论】:

对于传递“blobName”,我如何列出已删除的 blob,因为目录中删除了多个 blob。我假设我需要列出已删除的 blob,然后将这些 blob 作为“blobName”传递给 blobService.undelete_blob(containerName, blobName) @anudeep 根据我的搜索,没有这种方法可以直接在 sdk 或 rest api 中列出软删除 blob。您可以使用blob.exist() 来判断所需blob 的真实状态。请参考本案例:***.com/questions/52613916/… @anudeep 你好,有进展吗?我的回答对你有帮助吗?【参考方案3】:

要列出和删除,您可以使用下面的代码。带有 include=Include.DELETED 的 blob_service.list_blobs 方法将列出所有已删除和未删除的 blob。要遍历目录内部,请使用 delimiter = ''。 此外,如果 blob 中有更多文件,那么您可以使用标记来翻阅所有结果。

def restoreBlobs():
    blob_service = BlockBlobService(account_name=STORAGEACCOUNTNAME, account_key=STORAGEACCOUNTKEY)
    next_marker = None
    while True:
        blobs = blob_service.list_blobs(CONTAINERNAME, prefix=reverseSettledFolder, include=Include.DELETED, delimiter='', marker=next_marker, timeout=None)
        for blob in blobs:
            blob_service.undelete_blob(CONTAINERNAME, blob_name=blob.name, timeout=None)
            next_marker = blobs.next_marker
            if not next_marker:
                break
    print ("done")

【讨论】:

以上是关于列出并恢复软删除的 blob - azure python的主要内容,如果未能解决你的问题,请参考以下文章

Dot.Net Core 中 Azure blob 容器中的软删除 blob 文件

不考虑 blob 的软删除

Azure Blob 容器备份和恢复

ListBlobs 不列出已删除的 blob

对 Azure 存储的只写访问(不读取、不列出、不删除)

列出 Azure 存储容器中的 Blob,包括元数据