我无法重命名GCS中的现有文件夹。我该怎么做?
根据documentation,应为:
gsutil mv gs://my_bucket/olddir gs://my_bucket/newdir
但是,发生的情况是将olddir
放在newdir
下,即目录结构是这样的(在调用gsutil mv
之后):
my_bucket
newdir
olddir
而不是(我期望的)
my_bucket
newdir
我已经尝试过是否将斜杠全部放在四个组合中,但是都没有用。
答案 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
实际上只有在目录名newdir
是olddir
的子字符串时才会发生。因此,从问题中进行的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下,否则将保留子目录结构。
似乎不支持在同一目录中实际在线重命名的操作
最重要的是:必须将具有新文件名的目录从离线状态下推送。