Google云端存储:更新所有子文件夹下所有文件的时间戳的最简单方法是

时间:2017-09-09 01:52:38

标签: google-cloud-storage gsutil

我有root-dir / yyyy / mm / dd形式的datewise文件夹 存在这么多文件的地方。

我想更新属于某个日期范围的所有文件的时间戳, 例如2周即。 14个文件夹,这样这些文件就可以通过我的文件流数据摄取过程来获取。

实现这一目标的最简单方法是什么? 在UI控制台中有一种方法吗?还是通过gsutil? 请帮忙

2 个答案:

答案 0 :(得分:1)

GCS对象是不可变的,因此唯一的方法是更新"时间戳是将每个对象复制到自身之上,例如,使用:

gsutil cp gs://your-bucket/object1 gs://your-bucket/object1

(并循环遍历要执行此操作的所有对象)。 这是一个快速(仅元数据)操作,它将使用当前时间戳创建每个对象的新一代。

请注意,如果您在存储桶上启用了版本控制,则会创建您以此方式复制的每个文件的额外版本。

答案 1 :(得分:1)

当您说“root-dir / yyyy / mm / dd形式的文件夹”时,您的意思是将这些对象复制到名称为gs://my-bucket/root-dir/2016/12/25/christmas.jpg的存储桶中吗?如果没有,请看迈克的回答;但如果它们以该模式命名并且您只想重命名它们,则可以使用gsutil的mv命令重命名具有该前缀的每个对象:

$ export BKT=my-bucket
$ gsutil ls gs://$BKT/**
gs://my-bucket/2015/12/31/newyears.jpg
gs://my-bucket/2016/01/15/file1.txt
gs://my-bucket/2016/01/15/some/file.txt
gs://my-bucket/2016/01/15/yet/another-file.txt

$ gsutil -m mv gs://$BKT/2016/01/15 gs://$BKT/2016/06/20
[...]
Operation completed over 3 objects/12.0 B.

# We can see that the prefixes changed from 2016/01/15 to 2016/06/20
$ gsutil ls gs://$BKT/**
gs://my-bucket/2015/12/31/newyears.jpg
gs://my-bucket/2016/06/20/file1.txt
gs://my-bucket/2016/06/20/some/file.txt
gs://my-bucket/2016/06/20/yet/another-file.txt