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

Google cloud platform 使用gsutil重命名GCS中的文件夹,google-cloud-platform,google-cloud-storage,gsutil,Google Cloud Platform,Google Cloud Storage,Gsutil,我无法重命名GCS中的现有文件夹。我该怎么做 根据合同,这应该是: gsutil mv gs://my_bucket/olddir gs://my_bucket/newdir 但是,发生的情况是,olddir被置于newdir下,即目录结构如下(在调用gsutil mv之后): 而不是(我所期望的) 我已经尝试了四种组合,包括是否放置尾随斜杠,但都不起作用。我复制了你的案例,使用了一个名为olddir的文件夹,我想将其中的内容移动到newdir文件夹 以下命令: gsutils mv gs:

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

根据合同,这应该是:

gsutil mv gs://my_bucket/olddir gs://my_bucket/newdir
但是,发生的情况是,
olddir
被置于
newdir
下,即目录结构如下(在调用
gsutil mv
之后):

而不是(我所期望的)


我已经尝试了四种组合,包括是否放置尾随斜杠,但都不起作用。

我复制了你的案例,使用了一个名为olddir的文件夹,我想将其中的内容移动到newdir文件夹

以下命令:

 gsutils mv gs://<bucketname>/olddir gs://<bucketname>/newdir
gsutils mv gs:///olddir gs:///newdir
将文件夹的全部内容移动到新创建的newdir文件夹

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

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

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

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

请从头开始重试


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

这是GCS中确认的错误,请参阅

实际上,只有当
newdir
的目录名是
olddir
的子字符串时,才会发生这种情况。因此,问题中的
gsutil
调用实际上是有效的,但下面的调用不会:

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

当您运行
gsutil
命令并最终得到不需要的嵌套文件夹结构时,该命令的输出是什么?通常你会看到一个复制品。。。和删除。。。递归地为您的
olddir
下包含的所有文件换行。可能的重复:…这证实了我的答案-虽然我甚至提供了一个可行的解决问题的方法,而不是仅仅告诉“这是不可能的”。@yoape:是的,我看到很多“复制gs://[…]”和“删除gs://[…]”行。一般来说,在像GS和AWS S3这样的对象存储系统中,文件夹并不像文件那样是真正的一级项目。GS似乎已经修复了这个错误,但在对象管理中,您应该围绕文件而不是文件夹进行设计。我仔细检查了所有内容(在一个新的空桶中,使用新的文件夹/文件),但仍然看到错误的行为。这很奇怪,似乎不是一个使用问题,而是GCS中的一个bug。如果您对我使用的实际命令感兴趣,这是因为在您的情况下,在运行mv命令时,文件夹gs://my organization empty bucket/test_data已经存在,因此它会将data_b文件夹复制到名为test_data的文件夹中。如果目标test_数据文件夹不存在,它将创建它并将data_b文件夹的内容移动到test_数据文件夹中。根据脚本输出:gs://my organization empty bucket/test_data/text.txt$gsutil rm-r gs://my organization empty bucket/test_data Removinggs://my organization empty bucket/test_data/text.txt#1534770322877415…/[1个对象]操作已在1个对象上完成。已删除文件夹中的文件,但未删除文件夹本身。当我在我这边复制时,我已经在两个对象上完成了操作,文件和文件夹。GCS中不存在文件夹的概念。删除最后一个文件时,它也会删除文件夹。另外,我正在文件夹中调用
rm-r
。除此之外,如果我以前没有创建目录,错误也会发生。显然,如果新目录名是旧目录名的子字符串就足够了……根据问题追踪器的说法,这在gsutil v4.43之后已经得到了修复。我使用的是v4.51,它工作起来很有魅力。
 gsutils mv gs://<bucketname>/olddir gs://<bucketname>/newdir
gsutil mv gs://my-organization-empty-bucket/dir_old gs://my-organization-empty-bucket/dir