列出与桶标签与gsutil匹配的桶

时间:2019-01-23 16:30:33

标签: google-cloud-platform gsutil

我在Google云存储桶上贴了标签

我在文档中找不到如何进行gsutil ls的任何操作,但只能过滤具有特定标签的存储桶-这可能吗?

4 个答案:

答案 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个步骤进行操作:

  1. 获取GCP项目的所有存储桶。
  2. 获取每个存储桶的标签。
  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)

from google.cloud import storage

client = storage.Client()
for blob in client.list_blobs('bucketname', prefix='xjc/folder'):
  print(str(blob))

enter image description here