列出并恢复软删除的 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的主要内容,如果未能解决你的问题,请参考以下文章