2017-09-11 67 views
1

我想列出以固定字符串和字母數字字符開頭的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會的方式來達到理想的輸出

回答

0

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