将文件从一个存储桶拆分并复制到另一个存储桶,而不在本地下载
Split and copy a file from a bucket to another bucket, without downloading it locally
我想拆分并将一个大文件从一个存储桶(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 个分片用于传输是可以的)。
如果不下载就无法完成,但您可以使用范围读取来构建片段,而无需立即下载完整文件,例如,
gsutil cat -r 0-10000 gs://$SRC_BUCKET/$MY_HUGE_FILE | gsutil cp - gs://$DST_BUCKET/file1
gsutil cat -r 10001-20000 gs://$SRC_BUCKET/$MY_HUGE_FILE | gsutil cp - gs://$DST_BUCKET/file2
...
我想拆分并将一个大文件从一个存储桶(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 个分片用于传输是可以的)。
如果不下载就无法完成,但您可以使用范围读取来构建片段,而无需立即下载完整文件,例如,
gsutil cat -r 0-10000 gs://$SRC_BUCKET/$MY_HUGE_FILE | gsutil cp - gs://$DST_BUCKET/file1
gsutil cat -r 10001-20000 gs://$SRC_BUCKET/$MY_HUGE_FILE | gsutil cp - gs://$DST_BUCKET/file2
...