将多个 .gz 文件从一个 GCS 存储桶复制到 Java 中的另一个存储桶

Posted

技术标签:

【中文标题】将多个 .gz 文件从一个 GCS 存储桶复制到 Java 中的另一个存储桶【英文标题】:Copy multiple .gz files from one GCS bucket to another bucket in Java 【发布时间】:2017-01-27 10:24:01 【问题描述】:

我想将多个 .gz 文件从一个 gcs 存储桶复制到另一个。文件名模式的前缀为“Logs_”,后缀为“20160909”等日期,因此完整文件名将为 Logs_2016090.gz、Logs_20160908.gz 等。我想将所有以 Logs_ 开头的文件从一个 gcs 存储桶复制到另一个 gcs 存储桶.为此,我在末尾使用通配符 *,例如 Logs_*.gz 进行复制操作,如下所示:

Storage.Objects.Copy request =
            storageService
                .objects()
                .copy("source_bucket", "Logs_*.gz", "destination_bucket", ".", content);

上面我用的是“。”因为所有文件都必须复制到destination_bucket,所以我不能在那里指定单个文件名。不幸的是,此代码不起作用并且错误该文件不存在。我不确定这里需要什么更改。任何 java 链接或任何一段代码都会有所帮助。谢谢!!

【问题讨论】:

【参考方案1】:

虽然gsutil 命令行实用程序很高兴支持通配符,但 GCS API 本身是较低级别的命令并且不支持。 storage.objects.copy 方法必须有一个精确的源和一个精确的目标。

我推荐以下之一:

使用调用gsutil 的小脚本,或者 调用 storage.objects.list 以获取所有匹配源对象的名称,然后遍历它们,为每个对象调用副本,或者 如果您要处理超过 10 TB 左右的 gzip 文件,请考虑使用 Google 的云存储传输服务来复制文件。

【讨论】:

我正在遍历文件列表以一次传输一个。感谢您对此进行调查并分享有价值的信息。

以上是关于将多个 .gz 文件从一个 GCS 存储桶复制到 Java 中的另一个存储桶的主要内容,如果未能解决你的问题,请参考以下文章

composer 中的 bash 操作符,用于将最近的文件从一个 GCS 存储桶复制到另一个

将文件从 GCS 复制到 AWS S3 时如何设置 acl?

apache-beam 从 GCS 存储桶的多个文件夹中读取多个文件并加载它 bigquery python

从 Google Cloud Storage 复制时排除特定文件或目录

通过重命名在GCS下移动文件

将 GCS 存储桶中的 .csv 文件中的数据加载到 Cloud SQL 表中: