Я бы хотел разбить и скопировать огромный файл из корзины (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 с ограниченной емкостью дискового пространства, локально получить огромный файл невозможно (и в любом случае это выглядит как трата пропускной способности сети).
Файл в этом примере разделен по количеству строк (-l 1000000
), но я приму ответы, если разделение выполнено по количеству байтов.
Я посмотрел на документы о потоковой загрузке и загрузке, используя gsutil , чтобы сделать что-то вроде:
gsutil cp gs://$SRC_BUCKET/$MY_HUGE_FILE - | split -1000000 | ...
Но я не могу понять, как загружать разделенные файлы напрямую в gs://$DST_BUCKET/
, не создавая их локально (хотя временно можно создать только 1 осколок для передачи).