使用gsutil列出存储桶中所有对象的所有公共链接

时间:2016-09-21 06:59:28

标签: google-cloud-storage google-cloud-platform gsutil

有没有办法使用gsutil或gcloud命令列出存储在Google云端存储存储桶(或存储桶中的目录)中的所有对象的所有公共链接?

类似的东西:

$> gs ls -public-link gs:// my-bucket / a-directory

非常感谢!

2 个答案:

答案 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