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
になっているのは、リプレイス先がスペースを含んだ複数のファイルが一つのファイルと認識されてしまうため。