当前我正在使用:
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
并且没有看到明显的差异。
答案 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