После копирования файлов с помощью gsutil они не удаляются мгновенно из локального хранилища - PullRequest
0 голосов
/ 11 января 2019

Моя задача - загрузить файлы CSV из локальной базы данных в Google Cloud storage.

Для этого я сначала копирую их на рабочий стол, а затем загружаю их на Google Cloud storage.

Я хочу, чтобы это было сделано автоматически, без моего участия. Поэтому я создал файл CMD, который будет запускаться Task Scheduler. Структура файла CMD следующая:

gsutil cp C:\Users\Myname\Desktop\test\*.csv gs://my-bucket

gsutil rm C:\Users\Myname\Desktop\test\*.csv

Но после загрузки данных в `Облачное хранилище Google он не удаляет файлы CSV.

Однако , если вы запустите удаление в отдельной команде, удалит файлы.

Просто:

gsutil rm C:\Users\Myname\Desktop\test\*.csv

Но я хочу, чтобы код загрузки и удаления был в одном файле.

Я тоже так пробовал (но мне это тоже не помогло):

gsutil cp C:\Users\Myname\Desktop\test\*.csv gs://my-bucket

del C:\Users\Myname\Desktop\test\*.csv

Каковы решения этой проблемы?

Ответы [ 2 ]

0 голосов
/ 11 января 2019

Проблема в том, что gsutil является скриптом. В Windows этот скрипт (gsutil) завершает работу и останавливает дальнейшую обработку команд в вашем командном файле.

Решение состоит в том, чтобы добавить слово call перед gsutil:

call gsutil cp C:\Users\Myname\Desktop\test\*.csv gs://my-bucket

Далее, не используйте gsutil для удаления локального файла. Вместо этого используйте del.

0 голосов
/ 11 января 2019

Команда gsutil mv предназначена для этого случая использования.

Обратите внимание, однако, на раздел docs об атомарности . Особенно при перемещении из вашей локальной файловой системы в облако, нет никакой возможности загружать и удалять атомарно, поэтому команда сначала загрузит, проверит, хранится ли файл в облаке, а затем удалит локальный файл.

...