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

问题描述 投票:3回答:3

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

根据documentation,这应该是:

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

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

my_bucket
    newdir
        olddir

而不是(我期望的)

my_bucket
    newdir

我已经尝试了所有四种组合使用尾随斜杠或没有,但没有一个工作。

google-cloud-platform google-cloud-storage gsutil
3个回答
1
投票

我通过使用一个名为olddir的文件夹来重现您的案例,我想将其移动到newdir文件夹。

以下命令:

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

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

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

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

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

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

请从头开始重试。

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


1
投票

这是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

0
投票

gsutil help mv解释了它;而under这个词在这里有所不同。更好地将这些视为父实体,而不是“文件夹” - 因为这些“文件”不包含在某些目录结构中,但确实有parentIds ...尽管它的表示与目录结构完全相同。

RENAMING BUCKET SUBDIRORORORIES

您可以使用gsutil mv命令重命名子目录。例如,命令:

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

将gs:// my_bucket / olddir下的所有对象和子目录重命名为gs:// my_bucket / newdir,否则保留子目录结构。

在同一目录中实际重命名的操作似乎不受支持

底线是:必须从离线状态推送具有新文件名的目录。

© www.soinside.com 2019 - 2024. All rights reserved.