谷歌GSutil创建文件夹

26

如何使用gsutil命令在Google Cloud Storage中创建一个新文件夹?

我尝试了在创建Bucket时相同的命令,但仍然出现错误。

gsutil mb -l us-east1 gs://my-awesome-bucket/new_folder/
谢谢!
5个回答

26
在Google Cloud Storage中,“目录”的概念是抽象的。如文档所述 (子目录的工作原理):

gsutil 在 Google Cloud Storage 服务支持的“扁平”命名空间之上提供了一个分层文件树的幻觉。对于服务而言,对象 gs://your-bucket/abc/def.txt 只是具有其名称中包含 "/" 字符的对象。没有“abc”目录;只有一个给定名称的单个对象。

因此,您不能像在传统的文件系统中那样“创建”目录。

20

如果您已经清楚了存储桶中存在哪些文件夹和对象,那么您可以通过将一个对象复制到文件夹中来创建一个新的“文件夹”。

>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

请注意可能会有 意外的目标子目录命名 的潜在风险,例如,如果目标目录已经存在作为一个对象。对于自动化流程,更健壮的方法是使用 rsync

我不知道是否可以使用 gsutil 创建空文件夹。需要使用控制台上的 创建文件夹 按钮来完成此操作。


2
您无法使用gsutil创建文件夹,因为gsutil不支持(请参见下面的解决方法)。
但是,您可以通过以下方式进行支持:
- 浏览器中的UI - 编写自己的GCS客户端(我们编写了自己的自定义客户端,可以创建文件夹)
因此,即使Google具有像其他答案所指出的平面名称空间结构,它仍然有可能将单个文件夹创建为单独的对象。不幸的是,gsutil没有公开这个功能。
(丑陋的)解决方法:使用gsutil添加一个虚拟文件夹并上传该虚拟文件 - 但是,如果您删除此文件,则该文件夹将消失,除非该文件夹中存在其他文件。

0

你不能使用gsutilGCS上创建文件夹。

但是,您可以使用gsutil将现有文件夹复制到GCS中。

要使用gsutil将现有文件夹复制到GCS中,文件夹不能为空且需要添加标志“-r”,如下所示。否则,如果文件夹为空或忘记标志“-r”,则会出现错误:

gsutil cp -r <non-empty-folder> gs://your-bucket
      // "-r" is needed for folder

你不能使用 mb 创建一个空文件夹


0

从Google云帮助中复制:

将对象复制到存储桶中的文件夹 使用gsutil cp命令创建一个文件夹并将图像复制到其中:

gsutil cp gs://my-awesome-bucket/kitten.png gs://my-awesome-bucket/just-a-folder/kitten3.png

这个方法可行。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接