中野智文のブログ

データ・マエショリストのメモ

gsutil compose で 32より多いファイルを結合したいとき

背景

gsutil compose はファイルを結合する便利コマンド。しかし32より多いファイルは結合できない。

解決策

xargs -L31 を使う。

 echo -n | gsutil cp - gs://your-bucket/total.gz
 gsutil ls gs://your-bucket/your_file*.gz | xargs -L31 | xargs -I{} echo gsutil compose gs://your-bucket/total.gz {} gs://your-bucket/total.gz | sh

ここで、your-bucketバケット、total.gz はコピー先、your_file*.gz はコピー元を示す。

詳細

本当は xargs を一つにまとめたかったのだが、-I オプション(リプレイス)を使うと、強制的に -L31-L1 に変更されてしまうので、こうなった。 また echo ... | sh になっているのは、リプレイス先がスペースを含んだ複数のファイルが一つのファイルと認識されてしまうため。