谷歌 GSutil 创建文件夹
Posted
技术标签:
【中文标题】谷歌 GSutil 创建文件夹【英文标题】:Google GSutil create folder 【发布时间】:2019-01-24 07:35:57 【问题描述】:如何使用 gsutil 命令在谷歌云存储的存储桶内创建新文件夹?
我尝试在创建存储桶时使用相同的命令,但仍然出现错误
gsutil mb -l us-east1 gs://my-awesome-bucket/new_folder/
谢谢!
【问题讨论】:
【参考方案1】:目录的概念在 Google Cloud Storage 中是抽象的。来自文档 (How Subdirectories Work):
gsutil 在 Google Cloud Storage 服务支持的“平面”名称空间之上提供了分层文件树的错觉。对于服务而言,对象 gs://your-bucket/abc/def.txt 只是一个名称中恰好包含“/”字符的对象。没有“abc”目录;只是一个具有给定名称的对象。
因此您不能像在传统文件系统中那样“创建”目录。
【讨论】:
【参考方案2】:如果您清楚存储桶中已存在哪些文件夹和对象,则可以通过将对象复制到文件夹中来使用 gsutil 创建一个新的“文件夹”。
>mkdir test
>touch test/file1
>gsutil cp -r test gs://my-bucket
Copying file://test\file1 [Content-
Type=application/octet-stream]...
/ [1 files][ 0.0 B/ 0.0 B]
Operation completed over 1 objects.
>gsutil ls gs://my-bucket
gs://my-bucket/test/
>gsutil ls gs://my-bucket/test
gs://my-bucket/test/file1
如果本地目录为空,它将不起作用。
更简单:
>touch file2
>gsutil cp file2 gs://my-bucket/new-folder/
Copying file://test\file2 [Content- ...
>gsutil ls gs://my-bucket/new-folder
gs://my-bucket/new-folder/file2
注意Surprising Destination Subdirectory Naming 的潜力。例如。如果目标目录已经作为对象存在。对于自动化流程,更稳健的方法是使用rsync。
我不知道是否可以使用 gsutil 创建一个空文件夹。为此,请使用控制台的 创建文件夹 按钮。
【讨论】:
【参考方案3】:您不能使用 gsutil 创建文件夹,因为 gsutil 不支持它(解决方法见下文)。
但是,它通过以下方式得到支持:
浏览器中的用户界面 编写您自己的 GCS 客户端(我们已经编写了可以创建文件夹的自定义客户端)因此,即使如另一个答案正确指出的那样,Google 具有平面名称空间结构,它仍然有可能将单个文件夹创建为单个对象。不幸的是,gsutil 没有公开这一点。
(丑陋的)gsutil 解决方法:将虚拟文件添加到文件夹中并上传该虚拟文件 - 但是一旦删除此文件,该文件夹就会消失,除非该文件夹中存在其他文件.
【讨论】:
【参考方案4】:复制自 Google 云帮助:
将对象复制到存储桶中的文件夹 使用 gsutil cp 命令创建一个文件夹并将图像复制到其中:
gsutil cp gs://my-awesome-bucket/kitten.png gs://my-awesome-bucket/just-a-folder/kitten3.png
这行得通。
【讨论】:
以上是关于谷歌 GSutil 创建文件夹的主要内容,如果未能解决你的问题,请参考以下文章