将谷歌云平台中的目录移动到根目录

Posted

技术标签:

【中文标题】将谷歌云平台中的目录移动到根目录【英文标题】:Moving directory in the google cloud platform to the root 【发布时间】:2017-08-08 23:25:10 【问题描述】:

我在谷歌云平台上有一个桶。文件夹中的所有文件。我想将文件夹中的所有这些文件移动到根目录,即:

目前: /文件夹/[文件和文件夹]

我想要: /[文件和文件夹]

如何使用 gsutil 做到这一点?

【问题讨论】:

【参考方案1】:

你可以使用这个命令

gsutil mv gs://bucket_name/folder_old gs://bucket_name/

【讨论】:

【参考方案2】:

我不认为有一种聪明的方法可以快速做到这一点(阅读:使用一个 gsutil 命令),但是您可以遍历存储桶内容的列表并为每个条目运行 gsutil mv 命令,例如 Bash下面的例子:

$ # We have a lot of stuff in "folder1".
$ BUCKET=mybucket
$ gsutil ls gs://$BUCKET/**
gs://mybucket/folder1/subfolder/testfile.txt
gs://mybucket/folder1/testfile space.txt
gs://mybucket/folder1/testfile.txt
gs://mybucket/folder1/testfile2.txt

# Move it all to the root of the bucket!
# This approach accounts for spaces in object names.
$ FOLDERNAME="folder1"
$ gsutil ls "gs://$BUCKET/$FOLDERNAME/**" | while read objpath; do
    newpath="$(echo $objpath | sed "s#$FOLDERNAME/##")"
    gsutil mv "$objpath" "$newpath"
  done
[...]

# And verify the results:
$ gsutil ls gs://$BUCKET/**
gs://mybucket/subfolder/testfile.txt
gs://mybucket/testfile space.txt
gs://mybucket/testfile.txt
gs://mybucket/testfile2.txt

请注意,如果您有大量对象,执行 gsutil 的顺序执行(每个 mv 操作一个)会非常慢。我发现在使用这个脚本时,我花了 38 秒来移动 15 个对象(所以每个对象大约 2.5 秒)。

【讨论】:

【参考方案3】:

您可以将 * 通配符添加到源路径,它将文件夹的所有文件上传到目标而不创建额外的文件夹。

 gsutil -m mv gs://my-bucket/folder/* gs://my-bucket/

【讨论】:

【参考方案4】:

你可以使用技巧

gsutil -m mv gs://my-bucket/folder gs://my-bucket/folder/..

【讨论】:

我刚刚尝试了这个技巧,它创建了一个名为../ 的新子目录并将我的所有文件都移到了那里...

以上是关于将谷歌云平台中的目录移动到根目录的主要内容,如果未能解决你的问题,请参考以下文章

将谷歌云存储中的 json 文件加载到 bigquery 表中

通过python代码将谷歌云存储中的数据上传到分区表

将谷歌云盔甲添加到 Terraform gke 和 kubernetes

如何将谷歌云构建步骤文本输出保存到文件

如何将谷歌云自然语言实体情感响应转换为 Python 中的 JSON/dict?

将谷歌云功能连接到云 sql (postgreSQL)