【发布时间】:2019-10-22 18:26:39
【问题描述】:
我想拆分并将一个大文件从存储桶 (gs://$SRC_BUCKET/$MY_HUGE_FILE) 复制到另一个存储桶 (gs://$DST_BUCKET/),但不下载本地文件。我希望仅使用 gsutil 和 shell 命令来执行此操作。
我正在寻找与以下命令具有相同最终行为的东西:
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),但如果拆分按字节数完成,我将接受答案。
我查看了有关 streaming uploads and downloads using gsutil 的文档,以执行以下操作:
gsutil cp gs://$SRC_BUCKET/$MY_HUGE_FILE - | split -1000000 | ...
但我不知道如何将拆分文件直接上传到gs://$DST_BUCKET/,而不在本地创建它们(虽然暂时只创建 1 个分片进行传输是可以的)。
【问题讨论】:
-
您考虑过使用 Storage Transfer Service 吗?这正是它的含义:cloud.google.com/storage-transfer/docs/overview#what_is
-
我知道存储传输服务可用于将文件从存储桶传输到另一个存储桶,但在这里我想在复制之前拆分文件。我在 STS (cloud.google.com/storage-transfer/docs/reference/rest/v1/…) 中看不到任何拆分输入文件的选项。
-
明白。您是否有必要手动进行拆分/组合?因为您可以为 gsutil 启用多线程,或使用并行上传:cloud.google.com/solutions/…
-
不幸的是,目标存储桶中的文件必须具有最大行数(1 000 000),或者至少具有最大大小(10MB):满足这两个条件中的任何一个对我来说都可以。
标签: shell google-cloud-storage gsutil filesplitting