我需要将最后修改的文件从一个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
但这还不完整。我的动漫是将最近修改的文件从输入存储桶复制到目标存储桶。 请帮忙吗? 非常感谢
答案 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
只需编辑“