对于Google云端存储,使用gsutil的存储区名称不能使用通配符吗?

时间:2016-01-06 03:53:34

标签: google-cloud-storage gsutil

问题:可以在带有gsutil的GCS桶名中使用通配符吗?

我想使用分配在存储桶中的通配符来抓取GCS中的多个文件。但是,在使用gsutil的存储桶名称中使用通配符时,我一直遇到错误。我正在使用这样的通配符:

gsutil ls gs://myBucket-abcd-*/log/data_*

我希望匹配所有这些文件名(存储桶名称和对象名称中的变体):

gs://myBucket-abcd-1234/log/data_foo.csv
gs://myBucket-abcd-1234/log/data_bar.csv
gs://myBucket-abcd-5678/log/data_foo.csv
gs://myBucket-abcd-5678/log/data_bar.csv

Documentation on Bucket Wildcards告诉我,我应该能够在bucketname和object name中使用通配符,但上面的代码示例总是会出现“BadRequestException:400 Invalid argument。”

当我不使用通配符或仅在对象名称中使用通配符时,gsutil正在工作。但是为存储桶名称添加通配符会导致错误。有没有办法使通配符在存储桶名称中工作,还是我误解了链接的文档?

2 个答案:

答案 0 :(得分:2)

发现在这种情况下无法使用存储桶通配符正在按预期工作,并且是由于权限设置的差异。可以在存储桶和项目级别设置Google云端存储权限。

虽然在这种情况下使用的访问令牌可以访问每个桶,但它没有读者/编辑者/所有者访问顶级项目(在系统的许多用户之间共享)。如果没有访问项目,就不能在通配符上使用通配符。

这可以通过让项目所有者将用户添加为项目的读者/编辑者/所有者来解决。

在这种情况下,出于安全原因,我们无法为项目中的所有存储桶提供单独的令牌访问权限,但它有助于理解通配符无法正常工作的原因。感谢所有人的投入,尤其是特拉维斯的联系。

答案 1 :(得分:1)

某些 shell (Zsh) 试图扩展 * 和 ** ,因此您需要将这些包含在引号内。像这样

gsutil ls 'gs://myBucket-abcd-*/log/data_*'

我在这里找到它gsutil returning "no matches found"