Команда gsutil du
предназначена для получения информации о размере объектов корзины.Конечно, в качестве побочного эффекта вы можете использовать его, чтобы определить, доступно ли ведро, а не пустое (или нет).
Обратите внимание, что я имею в виду доступный, а не созданный, поскольку вы не сможете определить разницу между корзиной, не созданной, созданной, но недоступной (из-за разрешений или некоторого сбоя какого-либо рода) или доступнойно пусто.За исключением последнего / пустого случая, попытка создания корзины будет неудачной.
С точки зрения производительности / продолжительности gsutil du
не так уж велика, она может быть довольно медленной в контейнерах с большим количеством объектов в них, так какон тратит время на вычисления размера, которые не имеют отношения к вашей цели.
Вместо этого стоит попробовать команду gsutil ls
, предназначенную для получения только списка объектов в корзине,который обычно использует меньше ЦП, чем gsutil du
(без сбора / вычисления информации о размере).Используйте его без опций, чтобы избежать ненужного сбора дополнительной информации об объекте, просто имя объекта должно быть достаточно для пустой проверки.
Что-то вроде этого может быть:
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