使用大存储桶大小的bash检查google存储存储桶是否成功创建/是否为空

时间:2019-02-23 01:02:52

标签: google-cloud-platform google-cloud-storage

当前我正在使用:

is_created=$(gsutil du -s ${bucket_name} 2> /dev/null || true)
if [ -z "${is_created}" ]; then
    gsutil mb -p ${GCLOUD_PROJECT} -c regional -l ${gcloud_region} ${bucket_name}
fi

但是,由于我的存储桶很大,因此加载结果需要很长时间。还有另一种方法吗?

我尝试过的PS:

gsutil -m du -s

并且没有看到明显的差异。

1 个答案:

答案 0 :(得分:0)

gsutil du命令用于获取有关存储桶对象大小的信息。当然,作为副作用,您可以使用它来确定存储桶是否可访问且不是空的(或不是空的)。

请注意,我说的是可访问但未创建,因为您将无法分辨未创建,已创建但不可访问(由于权限或某种某种原因)或可访问但为空的存储桶之间的区别。除了最后一个/空的情况,尝试创建存储桶都会失败。

从性能/持续时间的角度来看,gsutil du并不是那么好,在存储有很多对象的存储桶中它可能会很慢,因为它花费时间进行大小计算,而这与您的目标无关。

要尝试的一件事是使用gsutil ls命令,该命令旨在仅获取存储桶中的对象列表,该列表通常比gsutil du使用更少的CPU(不收集/计算尺寸信息)。使用不带选项的选项可以防止不必要地收集其他对象信息,只需对象名称就足以进行空检查。

可能有以下几种情况:

missing=$(gsutil ls ${bucket_name} |& grep BucketNotFound | wc -l)
if [ ${missing} == 1 ]; then
    gsutil mb -p ${GCLOUD_PROJECT} -c regional -l ${gcloud_region} ${bucket_name}
fi

或者,在包含许多对象的存储桶上甚至更快:

created=$(gsutil ls -p ${GCLOUD_PROJECT} | grep ${bucket_name} | wc -l)
if [ ${created} == 0 ]; then
    gsutil mb -p ${GCLOUD_PROJECT} -c regional -l ${gcloud_region} ${bucket_name}
fi