如果 google 存储桶不存在,我想创建一个。否则,我想重用存储桶名称。怎么做? 相当于unix命令
mkdir -p 目录名称
我使用了该命令,但下次运行时我的 shell 脚本崩溃了。
gsutil mb -l ASIA gs://my_bucket_name_blah_blah
您可以先检查桶是否存在。我认为这样的事情会起作用:
gsutil ls -b gs://my_bucket_name_blah_blah || gsutil mb -l ASIA gs://my_bucket_name_blah_blah
由于如果存储桶已存在,第一个命令将返回 0 错误代码,因此只有在存储桶不存在时才会执行第二个命令。
但请注意,如果出现错误(暂时错误或权限被拒绝),第一个命令还将返回非零退出代码。因此,您可能需要一种更强大的方式来创建存储桶。
按照BoHuang的回答我可以想出这个:
# This function create a bucket
function create_bucket {
#PROJECT=$1
#BUCKET=$2
#REGION=$3
echo "Creating bucket [$2] in region [$3] for project [$1]"
if ! gsutil ls -p $1 gs://$2 &> /dev/null;
then
echo creating gs://$2 ... ;
gsutil mb -p $1 -c regional -l $3 gs://$2;
sleep 5;
else
echo "Bucket $2 already exists!"
echo "Please revise the bucket and delete manually or rerun the code"
exit 1
fi
}
六年后....
我发现这个GitLab脚本可以作为参考来解决这个问题
关键部分是
if ! gsutil ls -p ${GCP_PROJECT_ID} gs://${BUCKET} &> /dev/null; \
then \
echo creating gs://${BUCKET} ... ; \
gsutil mb -p ${GCP_PROJECT_ID} -c regional -l ${GCP_REGION} gs://${BUCKET}; \
sleep 10; \
fi
这是一块Makefile,但它几乎和一个shell脚本一样
您也可以转发
gcloud
function ensure_gcp_bucket_exists {
echo "Running "ensure_gcp_bucket_exists
BUCKET_NAME="gs://test-bucket"
if gcloud storage buckets describe "${BUCKET_NAME}" &> /dev/null ; then
"GCP Bucket ${BUCKET_NAME} already exists"
else
echo "Creating GCP Bucket ${BUCKET_NAME}"
gcloud storage buckets create "${BUCKET_NAME}"
fi
}