Open aibangjuxin opened 8 months ago
在大多数情况下,gsutil mv 的效率更高。
gsutil mv 不会创建新对象,而是将对象从旧位置移动到新位置。这意味着 gsutil mv 只需要执行一次数据写入操作,而 gsutil cp 需要执行两次数据写入操作。
以下是 gsutil mv 和 gsutil cp 的效率比较:
操作 | 描述 | 效率 |
---|---|---|
gsutil mv | 将对象从旧位置移动到新位置 | 更高 |
gsutil cp | 将对象从旧位置复制到新位置 | 更低 |
但是,在某些情况下,gsutil cp 的效率可能更高。例如,如果对象位于不同的区域或可用区,则 gsutil mv 需要将对象复制到新区域或可用区,然后再将其移动到新位置。这可能会导致 gsutil mv 的效率降低。
以下是 gsutil mv 和 gsutil cp 效率的影响因素:
因素 | 描述 |
---|---|
对象大小 | 对象越大,gsutil mv 的效率越高。 |
对象位置 | 对象位于同一区域或可用区,gsutil mv 的效率更高。 |
对象内容 | 对象内容相同,gsutil mv 的效率更高。 |
总体而言,gsutil mv 的效率更高。但是,在某些情况下,gsutil cp 的效率可能更高。您需要根据具体情况进行选择。
以下是一些使用 gsutil mv 和 gsutil cp 的示例:
# 使用 gsutil mv 将对象从旧位置移动到新位置
gsutil mv gs://old-bucket-name/object gs://new-bucket-name/object
# 使用 gsutil cp 将对象从旧位置复制到新位置
gsutil cp gs://old-bucket-name/object gs://new-bucket-name/object
移动只针对object 不针对buckets
可以实现。您可以使用NumVersions条件来指定要保留的对象数量。
以下是保留最近30个版本的lifecycle JSON文件示例:
{
"rules": [
{
"condition": {
"num_versions": {
"max": 30
}
},
"action": {
"type": "Delete"
}
}
]
}
这个文件指定,存储桶中最多保留30个版本的每个对象。
您可以将此JSON文件上传到GCP控制台,然后将其应用到存储桶。
以下是如何在GCP控制台上设置lifecycle管理的步骤:
设置lifecycle管理后,GCP将定期检查存储桶中的所有对象,并根据规则执行操作。
您还可以使用Google Cloud CLI或SDK来设置lifecycle管理。
以下是使用Google Cloud CLI设置lifecycle管理的示例:
gcloud storage lifecycle set my-bucket --lifecycle-file my-lifecycle.json
其中,my-bucket
是存储桶的名称,my-lifecycle.json
是lifecycle JSON文件的名称。
以下是使用Google Cloud SDK设置lifecycle管理的示例:
import google.cloud.storage
# 创建存储桶
bucket = storage.Bucket('my-bucket')
# 创建lifecycle JSON文件
with open('my-lifecycle.json', 'r') as f:
lifecycle = json.load(f)
# 设置lifecycle管理
bucket.lifecycle.update(lifecycle)
其中,my-bucket
是存储桶的名称,my-lifecycle.json
是lifecycle JSON文件的名称。
Buckets delete reference
# 创建空文件
true > "$tmpdir/deleted-tmp-buckets.txt"
# 输出提示信息
echo "List all tmp Buckets:"
# 获取符合条件的tmp Buckets列表
tmp_buckets=$(gcloud storage ls --project "$project" | grep "^gs://new-")
# 检查命令是否成功执行且输出不为空
if [ $? -eq 0 ] && [ -n "$tmp_buckets" ]; then
echo "The tmp Buckets exist in this Project"
else
echo "Command failed or output is empty. Exiting."
exit 1
fi
# 循环处理每个tmp bucket
for del_tmp_buckets in $tmp_buckets; do
# 输出分隔线
printf "%s\n" "--------------------------------------------------"
echo "Begin Delete buckets: $del_tmp_buckets"
# 记录删除开始时间
echo "$(date) Begin delete old name ${del_tmp_buckets}" >> "$tmpdir/deleted-tmp-buckets.txt"
# 执行删除操作
gsutil -m rm -rf "$del_tmp_buckets"
# 记录删除结束时间
echo "$(date) End delete old name ${del_tmp_buckets}" >> "$tmpdir/deleted-tmp-buckets.txt"
done
# 定义打印分割线的函数
function print_delimiter(){
awk 'BEGIN{while (a++<50) s=s "-"; print s}'
}
# 保存老的tmp buckets到数组
old_tmp_buckets=($(gcloud storage ls --project $project | grep "^gs://new-"))
# 检查是否有老的tmp buckets
if [[ -n "${old_tmp_buckets[@]}" ]]; then
echo "Old tmp buckets exist in this project"
# 循环删除
for bucket in "${old_tmp_buckets[@]}"; do
print_delimiter
echo "Begin deleting bucket: ${bucket}"
if ! gsutil -m rm -rf "gs://${bucket}"; then
echo "Failed to delete bucket: ${bucket}" >&2
exit 1
fi
echo "$(date) Deleted bucket: ${bucket}"
done
else
echo "No old tmp buckets found in this project"
exit 0
fi
你可以结合使用gcloud storage buckets describe
和一些命令行工具来实现这一目标。以下是一个可能的方法:
# 获取项目下所有存储桶的名称
buckets=$(gcloud storage buckets list --project=$PROJECT --format="value(name)")
# 遍历每个存储桶,检查是否启用了版本控制
for bucket in $buckets; do
# 获取存储桶的描述信息
bucket_info=$(gcloud storage buckets describe gsutil://$bucket --project=$PROJECT)
# 检查版本控制是否启用
versioning_enabled=$(echo "$bucket_info" | grep -oP 'versioning:\s+\K\w+')
# 如果版本控制启用,则打印存储桶名称
if [ "$versioning_enabled" = "enabled" ]; then
echo $bucket
fi
done
这段代码将打印出项目下所有启用了版本控制的存储桶的名称。
是的,可行。您可以使用以下方法之一来重命名存储桶:
在您的示例中,您可以将新名称输入为gs://avp-dev-new。
您还可以使用 Cloud Storage API 或 Cloud Storage CLI 来重命名存储桶。
以下是使用 Cloud Storage API 重命名存储桶的示例:
以下是使用 Cloud Storage CLI 重命名存储桶的示例:
请注意,重命名存储桶不会影响存储桶中的数据。但是,如果您使用存储桶名称作为 DNS 记录的一部分,则需要更新 DNS 记录以引用新的存储桶名称。
是的,Google Cloud buckets支持重命名。但是,存储桶的名称和地理位置是不可修改的元数据。如果您需要指定特定名称或地理位置,则必须在创建存储桶时进行指定。
要重命名存储桶,您可以使用以下方法之一:
您还可以使用 Cloud Storage API 或 Cloud Storage CLI 来重命名存储桶。
以下是使用 Cloud Storage API 重命名存储桶的示例:
以下是使用 Cloud Storage CLI 重命名存储桶的示例:
请注意,重命名存储桶不会影响存储桶中的数据。但是,如果您使用存储桶名称作为 DNS 记录的一部分,则需要更新 DNS 记录以引用新的存储桶名称。