有没有办法使用gsutil或gcloud命令列出存储在Google云端存储存储桶(或存储桶中的目录)中的所有对象的所有公共链接?
类似的东西:
$> gs ls -public-link gs:// my-bucket / a-directory
非常感谢!
答案 0 :(得分:2)
公开可见对象的公共链接是可预测的。他们只匹配这种模式:https://storage.googleapis.com/BUCKET_NAME/OBJECT_NAME
。
gsutil没有打印存储桶中对象的URL的命令,但它只能列出对象。您可以将其传递给像sed这样的程序,用对象名替换这些列表。例如:
gsutil ls gs://pub/** | sed 's/gs:\//https:\/\/storage.googleapis.com/'
这里的缺点是,这将产生所有资源的链接,而不仅仅是那些公开可见的资源。因此,您需要知道哪些资源是公开可见的,或者您需要根据gsutil ls -L
编写更精细的过滤器。
答案 1 :(得分:0)
即使问题是传递给gsutil
以获得可能的结果的可能标志,并且由于目前没有,我还是想发布一种使用 { {3}} ,可以将其扩展和/或修改为 Python 模块。
如下(唯一的第三方依赖项是google-cloud-storage):
python3 -c """
from operator import attrgetter
from pathlib import Path
import sys
from google.cloud import storage
url = Path(sys.argv[1]) #a blob with the objects we want...
bucket = storage.Client().bucket(url.parent.name)
urls = tuple(map(attrgetter('public_url'), filter(lambda blob:not blob.name.endswith('/'), bucket.list_blobs(prefix=url.name)))) # TODO improve this as not only excludes self blob as homologous 'folder' abstraction blobs inside
print('\n'.join(urls))
""" gs://my-bucket/a-directory