使用gsutil将最后修改的文件从一个存储桶复制到另一个存储桶

时间:2018-11-27 12:47:29

标签: google-cloud-platform google-cloud-storage

我需要将最后修改的文件从一个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 :(得分:1)

目前尚无法在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选项允许我们输入要从stdin复制的文件列表。

答案 1 :(得分:0)

使用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

只需编辑“ ”和“ ”字段并正常运行,它会将所有今天修改过的文件复制到目标存储桶中。