【问题标题】:Move files under GCS with renaming通过重命名移动 GCS 下的文件
【发布时间】:2019-07-21 14:09:23
【问题描述】:

我想编写以下 bash 脚本,它使用重命名选项将文件从一个 GCS 存储桶复制到另一个存储桶。

我的输入文件夹是gs://test-rtt-integration/result/frd/*.orc 我的目标文件夹是gs://test-rtt-integration/recent_files/frd

复制文件的重命名应根据gs://test-rtt-integration/complex-files/TAN/recent_files/today/frd提供的名称进行 完成重命名的副本后,我需要清理 gs://test-rtt-integration/result/frd

我测试了以下命令,但它们不能正常工作

NAME = "$(gsutil ls gs://test-rtt-integration/complex-files/TAN/recent_files/today/frd)"
gsutil mv gs://test-rtt-integration/result/frd/*.orc   gs://test-rtt-integration/recent_files/frd/$NAME
gsutil rm -rf gs://test-rtt-integration/result/frd

(所有.orc文件和其他文件都应该删除)

但这不能正常工作,因为我必须根据 / 拆分名称并获得最后一个拆分,所以如果拆分的结果称为 SPLIT ,我必须这样做 gsutil mv gs://test-rtt-integration/result/frd/*.orc gs://test-rtt-integration/recent_files/frd/$SPLIT

知道如何做到这一点吗?

【问题讨论】:

    标签: bash google-cloud-storage gsutil


    【解决方案1】:

    这个问题有点令人困惑。您说您想将文件从一个 Google Cloud Storage 存储桶移动到另一个存储桶,但所有操作都在一个名为 test-rtt-integration 的存储桶中进行。

    但是,一旦您使用命令gsutil ls gs://[BUCKET_NAME]/folder 获取文件位置,例如gs://[BUCKET_NAME]/folder/[FILENAME].orc,由于文件夹中所有对象的gs://[BUCKET_NAME]/folder/ 部分始终相同,只需将其替换为null,您将只得到最后的对象名称为[FILENAME].orc 等。

    我不确定这是否正是您要寻找的,但我自己编写了一些代码,并创建了一个 bash 脚本:

    • gs://[BUCKET_NAME]/from bucket 文件夹中获取每个对象的名称
    • 将所有对象从gs://[BUCKET_NAME]/from 存储桶文件夹复制到gs://[BUCKET_NAME]/to/ 存储桶文件夹
    • gs://[BUCKET_NAME]/frombucket文件夹中删除所有对象

    里面有 cmets 详细解释了每个操作是如何工作的。如果这不是您正在寻找的,您可以了解其工作原理的基本概念,并以更适合您的不同方式实施它。我已经在 Google Cloud Shell 中测试了自己的脚本并且它正在工作。 example code can be found in GitHub

    【讨论】:

      猜你喜欢
      • 2016-01-01
      • 1970-01-01
      • 2016-05-23
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 2019-01-26
      • 2017-01-13
      • 2020-12-06
      相关资源
      最近更新 更多