2017-09-11 291 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 

です私は

$ gsutil ls gs://somebucket/monitor* 

そして次試してみました

gs://somebucket/monitor 
gs://somebucket/monitor1 
$ gsutil ls gs://somebucket/monitor** 

しかし、どちらも必要な出力

を与える**ワイルドカードを使用した場合

答えて

0

gsutilのが唯一のリストは、オブジェクトがありますしない限り、つまり、オブジェクトう所望の出力を達成するためのgsutilの中に方法はありますmonitorsomebucketのパスでは、gs://somebucket/monitorは印刷されません。これを考えると、JSON APIを直接使用したり(grep/Python/<your scripting tool of choice here>で余分な文字列を処理する)、*ワイルドカードなしでgsutilを使用して、目的のプレフィックスとusing "/" as the delimiterを直接使用する方法があります。

これを実行するスクリプトの簡単な例:私は、後に発見された単純なアプローチも

# 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

あり:// sombucket /モニター* ':私達はちょうど' gsutilのLS -d GSを使用することができます望ましい結果を得るために – JustCode

関連する問題