快速删除非空 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)
用您当前的语言尝试类似的事情。
使用它来设置适当的生命周期规则。例如等一天。
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*
这是我唯一的选择还是有更快的方法?
# 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)
用您当前的语言尝试类似的事情。
使用它来设置适当的生命周期规则。例如等一天。
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*