快速删除非空 Google 桶的方法?

Fast way of deleting non-empty Google bucket?

这是我唯一的选择还是有更快的方法?

# Delete contents in bucket (takes a long time on large bucket)
gsutil -m rm -r gs://my-bucket/*

# Remove bucket
gsutil rb gs://my-bucket/

从 Developers Console 中删除存储桶。它会在删除非空桶之前要求确认。它就像一个魅力 ;)

另一种选择是在存储桶上启用 Lifecycle Management。您可以将 Age 指定为 0 天,然后等待几天。您的所有对象都应删除。

桶在被删除之前必须是空的。因此,在删除存储桶之前,您必须删除它包含的所有对象。

您可以使用 gsutil rm -r (documentation) 执行此操作。只是不要传递 * 通配符,它​​会在删除所有对象后删除存储桶本身。

gsutil -m rm -r gs://my-bucket

Google Cloud Storage 存储桶删除只有在存储桶列出 returns 0 个对象后才能成功。如果对象仍然存在,您可能会在尝试删除存储桶时收到“存储桶不为空”错误(或者在 UI 的情况下 'Bucket Not Ready')。

gsutil 具有内置的重试逻辑来删除存储桶和对象。

使用 Python 客户端,您可以使用以下命令在脚本中强制删除:

bucket.delete(force=True)

用您当前的语言尝试类似的事情。

Github thread that discusses this

使用它来设置适当的生命周期规则。例如等一天。

https://cloud.google.com/storage/docs/gsutil/commands/lifecycle

示例 (复制粘贴前请仔细阅读)

gsutil lifecycle set [LIFECYCLE_CONFIG_FILE] gs://[BUCKET_NAME]

示例 (复制粘贴前请仔细阅读)

{
  "rule":
  [
    {
      "action": {"type": "Delete"},
      "condition": {"age": 1}
    }
  ]
}

然后删除桶。

This will delete the data asynchronously, so you don't have to keep some background job running on your end.

这点值得总结和指出。

如果您有大量(TB)数据,使用 gsutil rm 删除会很慢

gsutil -m rm -r gs://my-bucket

但是,您可以指定存储桶的到期时间,让 GCS 为您完成工作。创建 fast-delete.json 政策:

{
   "rule":[
      {
         "action":{
            "type":"Delete"
         },
         "condition":{
            "age":0
         }
      }
   ]
}

然后申请

gsutil lifecycle set fast-delete.json gs://MY-BUCKET

谢谢@jterrace 和@Janosch

生命周期变化的更短的一行:

gsutil lifecycle set <(echo '{"rule":[{"action":{"type":"Delete"},"condition":{"age":0}}]}') gs://MY-BUCKET

我也很幸运地创建了一个空桶,然后开始传输到我想清空的桶。我们最大的水桶用这种方式清空了大约一个小时;生命周期方法似乎至少需要一天。

两种方法我都试过了(过期时间和 gsutil 命令直接到 bucket root),但我等不及过期时间传播。

gsutil rm 每秒删除 200 个文件,所以我这样做了:

打开多个终端并使用带 *

的不同“文件夹”名称执行 gsutil rm

即:

gsutil -m rm -r gs://my-bucket/a*
gsutil -m rm -r gs://my-bucket/b*
gsutil -m rm -r gs://my-bucket/c*

在此示例中,该命令每秒可以删除600 个文件。 所以你只需要打开更多的终端并找到删除更多文件的模式。 如果一个通配符很大,你可以详细说明,像这样

gsutil -m rm -r gs://my-bucket/b1*
gsutil -m rm -r gs://my-bucket/b2*
gsutil -m rm -r gs://my-bucket/b3*