与gsutil列出的通配符文件夹
问题描述:
我想列出以固定字符串和字母数字字符开头的GCS文件夹。我不想做一个递归列表。当我尝试以下与gsutil列出的通配符文件夹
比方说,我们有以下的文件夹结构(我知道有没有概念,内部没有文件夹的概念,它只是路径前缀)
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
还有,我后来发现一个简单的方法:我们可以只用'LS的gsutil -d GS:// sombucket /监视器*'得到理想的结果 – JustCode