проверьте, не была ли корзина хранения Google успешно создана / не пуста, используя bash с большим размером корзины - PullRequest
0 голосов
/ 23 февраля 2019

В настоящее время я использую:

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 голосов
/ 23 февраля 2019

Команда 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
...