使用 gsutil 列出通配符文件夹
Wildcard folder listing with gsutil
我正在尝试列出以固定字符串开头后跟字母数字字符的 GCS 文件夹。我不想做递归列表。当我尝试关注
假设我们有以下文件夹结构(我知道内部没有概念没有文件夹的概念。它只是路径前缀)
gs://somebucket/monitor/a
gs://somebucket/monitor/a/a1.log.gz
gs://somebucket/monitor/a/a2.log.gz
gs://somebucket/monitor/b
gs://somebucket/monitor/b/b1.log.gz
gs://somebucket/monitor/b/b2.log.gz
gs://somebucket/monitor/c
gs://somebucket/monitor1/x
gs://somebucket/monitor1/y
gs://somebucket/monitor1/z
在输出中我想要的是
gs://somebucket/monitor
gs://somebucket/monitor1
我试过关注
$ gsutil ls gs://somebucket/monitor*
和
$ gsutil ls gs://somebucket/monitor**
但都没有给出所需的输出
gsutil 中有没有办法实现所需的输出
gsutil 只会在使用 ** 通配符时列出对象,这意味着除非在 somebucket
中的路径 monitor
处有对象,否则它不会只打印 gs://somebucket/monitor
。鉴于此,有几种方法要么直接使用 JSON API(提供所需的前缀和 using "/" as the delimiter),要么使用不带 ** 通配符的 gsutil,对通过 grep/Python/<your scripting tool of choice here>
.
的字符串
执行此操作的脚本的快速示例:
# Say I want the objects starting with "201", but have others:
$ gsutil ls gs://my-bucket/**
gs://my-bucket/other-thing
gs://my-bucket/2015/01/01/foo.jpg
gs://my-bucket/2016/12/25/christmas.jpg
$ export PATTERN="gs://my-bucket/201"
$ gsutil ls "$(python -c "print \"${PATTERN}\"[0:\"${PATTERN}\".rfind('/')]")" | grep -o "$PATTERN[^/]*"
gs://my-bucket/2015
gs://my-bucket/2016
您可能正在使用 zsh 作为 shell。在发送到 gsutil 之前,shell 试图在本地搜索它。尝试
gsutil ls 'gs://somebucket/monitor*'
这应该有效(注意单引号)。
我正在尝试列出以固定字符串开头后跟字母数字字符的 GCS 文件夹。我不想做递归列表。当我尝试关注
假设我们有以下文件夹结构(我知道内部没有概念没有文件夹的概念。它只是路径前缀)
gs://somebucket/monitor/a
gs://somebucket/monitor/a/a1.log.gz
gs://somebucket/monitor/a/a2.log.gz
gs://somebucket/monitor/b
gs://somebucket/monitor/b/b1.log.gz
gs://somebucket/monitor/b/b2.log.gz
gs://somebucket/monitor/c
gs://somebucket/monitor1/x
gs://somebucket/monitor1/y
gs://somebucket/monitor1/z
在输出中我想要的是
gs://somebucket/monitor
gs://somebucket/monitor1
我试过关注
$ gsutil ls gs://somebucket/monitor*
和
$ gsutil ls gs://somebucket/monitor**
但都没有给出所需的输出
gsutil 中有没有办法实现所需的输出
gsutil 只会在使用 ** 通配符时列出对象,这意味着除非在 somebucket
中的路径 monitor
处有对象,否则它不会只打印 gs://somebucket/monitor
。鉴于此,有几种方法要么直接使用 JSON API(提供所需的前缀和 using "/" as the delimiter),要么使用不带 ** 通配符的 gsutil,对通过 grep/Python/<your scripting tool of choice here>
.
执行此操作的脚本的快速示例:
# Say I want the objects starting with "201", but have others:
$ gsutil ls gs://my-bucket/**
gs://my-bucket/other-thing
gs://my-bucket/2015/01/01/foo.jpg
gs://my-bucket/2016/12/25/christmas.jpg
$ export PATTERN="gs://my-bucket/201"
$ gsutil ls "$(python -c "print \"${PATTERN}\"[0:\"${PATTERN}\".rfind('/')]")" | grep -o "$PATTERN[^/]*"
gs://my-bucket/2015
gs://my-bucket/2016
您可能正在使用 zsh 作为 shell。在发送到 gsutil 之前,shell 试图在本地搜索它。尝试
gsutil ls 'gs://somebucket/monitor*'
这应该有效(注意单引号)。