使用 gsutil 重命名 GCS 中的文件夹

Rename a folder in GCS using gsutil

我无法重命名 GCS 中的现有文件夹。我该怎么做?

根据 documentation,这应该是:

gsutil mv gs://my_bucket/olddir gs://my_bucket/newdir

然而,olddir 被放置在 newdir 下,即目录结构是这样的(在调用 gsutil mv 之后):

my_bucket
    newdir
        olddir

而不是(我所期望的)

my_bucket
    newdir

我已经尝试了所有四种组合是否放置尾部斜杠,但 none 行得通。

我重现了您的情况,方法是在一个存储桶中包含一个名为 olddir 的文件夹,我想将其中的内容移动到 newdir 文件夹。

以下命令:

 gsutils mv gs://<bucketname>/olddir gs://<bucketname>/newdir

将文件夹的全部内容移动到新创建的 newdir 文件夹中。

Olddir 和 newdir 文件夹然后处于同一级别,在存储桶根目录中。 之后我只需要删除名为 olddir 的文件夹。

存储桶中的对象无法重命名。

gsutil mv 命令不会像 Unix CLI 中的 mv 命令那样删除先前的文件夹对象。

我猜想如果您尝试使用不同位置的“/”字符多次移动文件夹,那么在发出初始命令后文件夹的结构和层次结构将发生变化。

请从头重试

请记住,一旦文件夹中有子文件夹,就必须使用完整路径一个一个地移动对象。

这是 GCS 中已确认的错误,请参阅 https://issuetracker.google.com/issues/112817360

它实际上只发生在 newdir 的目录名称是 olddir 的子字符串时。因此,问题中的 gsutil 调用实际上有效,但以下调用无效:

gsutil mv gs://my-organization-empty-bucket/dir_old gs://my-organization-empty-bucket/dir