快速删除 GCS 存储桶上的大文件夹的方法

Posted

技术标签:

【中文标题】快速删除 GCS 存储桶上的大文件夹的方法【英文标题】:Fast way to delete big folder on GCS bucket 【发布时间】:2020-05-15 09:56:32 【问题描述】:

我有一个非常大的 GCS 存储桶(几 TB),有几个子目录,每个目录都有几 TB 的数据。

我想删除其中一些文件夹。

我尝试使用 Cloud Shell 中的 gsutil,但需要很长时间。

作为参考,这是我正在使用的命令:

gsutil -m rm -r "gs://BUCKET_NAME/FOLDER"

我正在查看this question,并认为也许我可以使用它,但它似乎无法按文件夹名称过滤,而且我无法按任何其他内容过滤,因为文件夹有一些混合内容。

到目前为止,我最后的手段是等到我要删除的文件夹“旧”,然后相应地设置生命周期规则,但这可能需要太长时间。

还有其他方法可以加快速度吗?

【问题讨论】:

【参考方案1】:

这需要很长时间;您必须对前缀为 FOLDER/ 的每个对象发出 DELETE 请求。

GCS 没有“文件夹”的概念。对象名称可以共享一个公共前缀,但它们都在一个平面命名空间中。例如,如果你有这三个对象:

/a/b/c/1.txt /a/b/c/2.txt /a/b/c/3.txt

...那么您实际上没有名为 abc 的文件夹。删除这三个对象后,当您在存储桶中列出对象时,“文件夹”(即它们共享的前缀)将不再出现。

有关详细信息,请参阅文档:

https://cloud.google.com/storage/docs/gsutil/addlhelp/HowSubdirectoriesWork

【讨论】:

谢谢 :) 我想我要问的是,是否有任何“技巧”可以更快地删除对象...... 如果您可以使用生命周期管理 (cloud.google.com/storage/docs/lifecycle),唯一可以显着加快删除速度的方法,但这仅适用于整个存储桶,而不适用于存储桶中的“文件夹”。跨度>

以上是关于快速删除 GCS 存储桶上的大文件夹的方法的主要内容,如果未能解决你的问题,请参考以下文章

如何设置 GCS 存储桶的限制

如何在 GCS 中的增量表之上创建 BQ 外部表并仅显示最新快照

为啥 GCP 存储桶上的新文件不发送 pubsub 消息?

S3 存储桶上的未加密文件是不是有 Etag?

在 gcs 上使用 parquet 文件创建新的大查询外部表时。显示错误

在 Dataflow 的云存储桶上哪里可以找到这个 pubsub 订阅?