如何清理 Azure 存储 Blob 容器?
如何清理Azure存储Blob容器?
最简单的方法是使用Microsoft Azure Storage Explorer。
- 下载并安装Azure Storage Explorer
- 使用适当的Microsoft帐户登录
- 浏览到要清空的容器
- 点击“全选”按钮
- 点击“删除”按钮
这里的重点是“HOW”-您必须点击“加载更多”直到到达最后一页的Blob,然后点击“全选”,然后删除。
选择全部可以应用于“本页全部”和“全部缓存”,无需加载所有页面。这是一个很棒的工具,感谢分享这些信息。
Azure Storage Explorer很棒,但删除文件的速度很慢。尝试清理包含10万个以上文件的容器-这将需要很长时间。
同意。我翻了20页,每页1000条记录(只需继续点击第10、20、30页等),最终将20,000条记录放入缓存,一切看起来都很正常。然后我点击“全选>缓存”,但一旦我点击删除,它就完全锁定了我的笔记本电脑(配备Core i5和8GB RAM),几分钟后Azure Storage Explorer崩溃。我重复这个过程,结果相同。自Win7时代或更早以来,我还没有见过一个程序崩溃得这么彻底...
使用Azure CLI吧:)我将更新我的答案,添加一个指向joanlofe答案的链接。
是的,这是一个明显的答案,但是如果我只是每18-24个月才执行一次这样的任务,那么能够打开一个图形界面来执行这样的任务将是很好的,而不是每次都要查找答案:)
问题的原因是,Azure存储Blob容器只能通过删除整个容器来批量删除Blob,而删除容器后需要一段时间才能再次使用该容器名称。另一种选择是逐个删除Blob,如果可以在存储Blob的同一数据中心进行删除,速度会比本地运行删除快。
解决方法是编写代码来实现删除操作,可以并行删除项来加快整个过程。下面是一个示例代码:
Parallel.ForEach(myCloudBlobClient.GetContainerReference(myContainerName).ListBlobs(), x => ((CloudBlob) x).Delete());
如果使用了文件夹,可以将文件作为一个扁平列表返回:
Parallel.ForEach(blobContainer.ListBlobs(useFlatBlobListing: true), x => ((CloudBlob)x).Delete());
这样做会更安全一些。
问题的出现原因:用户想要了解如何清理Azure存储Blob容器,但是在尝试使用Azure CLI 2.0的命令时遇到了一些问题,如缺少必要的参数、错误的参数格式等。
解决方法:
1. 使用Azure CLI 2.0的命令az storage blob delete-batch --account-name <storage_account_name> --source <container_name>
,并将<storage_account_name>
和<container_name>
换成相应的值。
2. 运行az storage blob delete-batch -h
命令查看帮助。
3. 如果出现错误信息:"This operation is not permitted because the blob has snapshots. ErrorCode: SnapshotsPresent",可以尝试添加--delete-snapshots include
选项。
4. 如果有访问Azure门户的权限,可以使用Azure门户进行操作。
5. 通过在命令中添加--connection-string
参数,并用引号括起来。
6. 如果上述方法太慢,需要寻找替代方法。
7. 对于命令az storage blob delete-batch --account-name myaccountname --source $web
出现argument --source/-s: expected one argument
的错误。
文章内容如下:
如何清理Azure存储Blob容器?
使用Azure CLI 2.0的命令az storage blob delete-batch --account-name <storage_account_name> --source <container_name>
可以快速清理Azure存储Blob容器。在运行命令之前,需将<storage_account_name>
和<container_name>
替换为实际的值。可以通过运行az storage blob delete-batch -h
命令查看命令的帮助信息。如果出现错误信息:"This operation is not permitted because the blob has snapshots. ErrorCode: SnapshotsPresent",可以尝试添加--delete-snapshots include
选项。如果有访问Azure门户的权限,可以使用Azure门户进行操作。另外,在命令中添加--connection-string
参数,并用引号括起来。如果上述方法太慢,可以寻找替代方法。对于命令az storage blob delete-batch --account-name myaccountname --source $web
出现argument --source/-s: expected one argument
的错误。