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

时间:2018-08-20 09:24:24

标签: google-cloud-platform google-cloud-storage gsutil

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

根据documentation,应为:

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

但是,发生的情况是将olddir放在newdir下,即目录结构是这样的(在调用gsutil mv之后):

my_bucket
    newdir
        olddir

而不是(我期望的)

my_bucket
    newdir

我已经尝试过是否将斜杠全部放在四个组合中,但是都没有用。

3 个答案:

答案 0 :(得分:1)

我用一个带有名为olddir的文件夹的存储桶重现了您的情况,我想将其中的内容移动到newdir文件夹。

以下命令:

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

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

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

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

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

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

请从头开始尝试。

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

答案 1 :(得分:1)

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

实际上只有在目录名newdirolddir的子字符串时才会发生。因此,从问题中进行的gsutil调用实际上是有效的,但下面的调用无效:

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

答案 2 :(得分:0)

gsutil help mv对此进行了解释; under一词在这里与众不同。最好将它们视为父实体,而不是“文件夹”-因为这些“文件”没有包含在某些目录结构中,但是确实具有parentIds ...尽管它的表示方式与目录结构非常相似。

  

重命名桶子目录

     

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

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

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

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

最重要的是:必须将具有新文件名的目录从离线状态下推送