我在Google云存储桶上贴了标签
我在文档中找不到如何进行gsutil ls
的任何操作,但只能过滤具有特定标签的存储桶-这可能吗?
答案 0 :(得分:1)
有一个用例,我想列出所有带有特定标签的存储桶。使用子过程的可接受答案对我来说明显很慢。这是我使用Python客户端库进行云存储的解决方案:
from google.cloud import storage
def list_buckets_by_label(label_key, label_value):
# List out buckets in your default project
client = storage.Client()
buckets = client.list_buckets() # Iterator
# Only return buckets where the label key/value match inputs
output = list()
for bucket in buckets:
if bucket.labels.get(label_key) == label_value:
output.append(bucket.name)
return output
答案 1 :(得分:0)
现在不可能一步一步完成您想做的事情。您可以通过3个步骤进行操作:
gsutil ls
。这是我为您执行的python 3代码。
import subprocess
out = subprocess.getoutput("gsutil ls")
for line in out.split('\n'):
label = subprocess.getoutput("gsutil label get "+line)
if "YOUR_LABEL" in str(label):
gsout = subprocess.getoutput("gsutil ls "+line)
print("Files in "+line+":\n")
print(gsout)
答案 2 :(得分:0)
仅bash
的解决方案:
function get_labeled_bucket {
# list all of the buckets for the current project
for b in $(gsutil ls); do
# find the one with your label
if gsutil label get "${b}" | grep -q '"key": "value"'; then
# and return its name
echo "${b}"
fi
done
}
'"key": "value"'
部分只是一个字符串,请用您的键和值替换。用LABELED_BUCKET=$(get_labeled_bucket)
我认为,使bash函数返回一个以上的值比它值得的麻烦更多。如果您需要使用多个存储桶,则可以将echo替换为需要运行的代码。
答案 3 :(得分:0)