我无法重命名GCS中的现有文件夹。我该怎么做呢?
根据documentation,这应该是:
gsutil mv gs://my_bucket/olddir gs://my_bucket/newdir
然而,发生的是olddir
被置于newdir
下,即目录结构是这样的(在调用gsutil mv
之后):
my_bucket
newdir
olddir
而不是(我期望的)
my_bucket
newdir
我已经尝试了所有四种组合使用尾随斜杠或没有,但没有一个工作。
我通过使用一个名为olddir的文件夹来重现您的案例,我想将其移动到newdir文件夹。
以下命令:
gsutils mv gs://<bucketname>/olddir gs://<bucketname>/newdir
将文件夹的全部内容移动到新创建的newdir文件夹。
然后,Olddir和newdir文件夹位于存储桶根目录中的同一级别。之后我只需删除名为olddir的文件夹。
无法重命名存储桶中的对象。
gsutil mv命令不会删除以前的文件夹对象,就像mv命令在Unix CLI中那样。
我想如果您尝试使用不同的“/”字符多次移动文件夹,则在发出初始命令后,文件夹的结构和层次结构将发生变化。
请从头开始重试。
请记住,一旦文件夹中有子文件夹,就必须使用完整路径逐个移动对象。
这是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
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,否则保留子目录结构。
在同一目录中实际重命名的操作似乎不受支持
底线是:必须从离线状态推送具有新文件名的目录。