скопируйте последние измененные файлы из одного сегмента в другой, используя gsutil - PullRequest
0 голосов
/ 27 ноября 2018

Мне нужно скопировать последние измененные файлы из одной корзины GCS в другую.Давайте предположим, что входной сегмент равен:

gs://input-bucket/object 

, а целевой диапазон равен:

gs://target-bucket/object

Я хочу скопировать файлы последних файлов за сегодня: я написал

gsutil ls -l gs://renault-ftt-vll-dfp/complex-files/PAN/TRM    | sort -k2n | tail -n5   | sort -k2n | tail -n5 

Но это еще не все.Моя цель - скопировать файлы, которые были изменены в последний раз, из входного сегмента в целевой.Любая помощь с этим, пожалуйста?Большое спасибо

Ответы [ 2 ]

0 голосов
/ 27 ноября 2018

В настоящее время это невозможно сделать в gsutil, но это возможно с помощью терминала.

gsutil -m ls -l gs://input-bucket | grep $(date -I) | sed 's/.*\(gs:\/\/\)/\1/''| gsutil cp -I gs://target-bucket/

Чтобы сломать его:

gsutil -m ls -l gs://input-bucket - здесь будут перечислены все объекты в области ввода

пример строки: 29 2018-11-27T15:43:24Z gs://input-bucket/README.md

grep $(date -I) - поиск всех строк, содержащих сегодняшнюю дату.(найти все объекты, измененные сегодня)

sed 's/.*\(gs:\/\/\)/\1/'' - Это удалит все до того места, где начинается gs://, поэтому изменит строку с 29 2018-11-27T15:43:24Z gs://input-bucket/README.md на gs://input-bucket/README.md

gsutil cp -I gs://target-bucket/ - Скопируйте его в целевое хранилище, опция -I позволяет нам ввести список файлов для копирования со стандартного ввода.

0 голосов
/ 27 ноября 2018

Это невозможно сделать с помощью gsutil, но я сделал для вас этот прекрасный скрипт на python:

import subprocess
import re
import datetime

child = subprocess.Popen('gsutil ls -l gs://<YOUR_BUCKET> | sort -k2n',shell=True,stdout=subprocess.PIPE)
output = child.communicate()[0]

datepattern = re.compile("\d{4}-\d{2}-\d{2}")
matcher = datepattern.search(output)

for line in output.splitlines():
    datepattern = re.compile("\d{4}-\d{2}-\d{2}")
    matcher = datepattern.search(line)
    if matcher:
        if matcher.group(0) == datetime.datetime.today().strftime('%Y-%m-%d'):

            filebucket = line[line.index("gs://") + len("gs://"):]
            child = subprocess.Popen("gsutil cp gs://"+filebucket+" gs://<YOUR_DESTINATION_BUCKET>",shell=True,stdout=subprocess.PIPE)
            outputCopy=child.communicate()[0]
            print outputCopy

Просто отредактируйте поля "" и "" и запустите этокак правило, он должен копировать все файлы, которые были изменены сегодня, в ваш целевой каталог.

...