与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 
+1

还有,我后来发现一个简单的方法:我们可以只用'LS的gsutil -d GS:// sombucket /监视器*'得到理想的结果 – JustCode