巨大なファイルをバケット ( ) から別のバケット ( )に分割してコピーしたいのですが、ファイルをローカルにダウンロードする必要はありません。私はシェルコマンドのみを使用してこれを行うことを期待しています。gs://$SRC_BUCKET/$MY_HUGE_FILE
gs://$DST_BUCKET/
gsutil
次のコマンドと同じ最終的な動作を持つものを探しています:
gsutil cp gs://$SRC_BUCKET/$MY_HUGE_FILE my_huge_file_stored_locally
split -l 1000000 my_huge_file_stored_locally a_split_of_my_file_
gsutil -m mv a_split_of_my_file_* gs://$DST_BUCKET/
しかし、ディスク ストレージ容量が限られている Compute Engine VM でこれらのアクションを実行しているため、巨大なファイルをローカルで取得することはできません (とにかく、ネットワーク帯域幅の浪費のようです)。
この例のファイルは行数(-l 1000000
)で分割されていますが、バイト数で分割されていれば回答を受け付けます。
gsutil を使用してストリーミングのアップロードとダウンロードに関するドキュメントを見て、次のようなことを行いました。
gsutil cp gs://$SRC_BUCKET/$MY_HUGE_FILE - | split -1000000 | ...
gs://$DST_BUCKET/
しかし、分割ファイルをローカルに作成せずに に直接アップロードする方法がわかりません(転送用に一時的に 1 つのシャードのみを作成しても問題ありません)。