在我的笔记本电脑上,我有一个目录,其中包含一个子目录,该子目录又包含一堆 HTML 文件。它看起来像这样:
% ls -lR 2000-09
2000-09:
total 12
drwxrwxr-x 2 skip skip 12288 Nov 18 07:42 html
2000-09/html:
total 648
-rw-r--r-- 1 skip skip 18489 Dec 4 2019 index.html
-rw-r--r-- 1 skip skip 18489 Dec 4 2019 maillist.html
-rw-r--r-- 1 skip skip 3468 Dec 4 2019 msg00000.html
-rw-r--r-- 1 skip skip 3270 Dec 4 2019 msg00001.html
-rw-r--r-- 1 skip skip 3194 Dec 4 2019 msg00002.html
...
我使用 gsutil 将该目录上传到我的存储桶:
% gsutil -m cp -r 2000-09 gs://my-secret-bucket/
Copying file://2000-09/html/msg00070.html [Content-Type=text/html]...
Copying file://2000-09/html/msg00060.html [Content-Type=text/html]...
Copying file://2000-09/html/msg00029.html [Content-Type=text/html]...
Copying file://2000-09/html/msg00052.html [Content-Type=text/html]...
...
通过控制台看起来不错。我看到2000-09
了,在那html
里面,在那一堆文件里面。到目前为止,一切都很好。
现在我打开一个云外壳并使用以下方法安装该存储桶gcsfuse
:
gcsfuse my-secret-bucket ~/mnt
但生成的目录视图显示为空:
me@cloudshell:~ (whatever)$ ls -l ~/mnt
total 0
me@cloudshell:~ (whatever)$
然后我将几个文件直接上传到我的存储桶中(在顶层)
% gsutil -m cp wrench?.jpg gs://my-secret-bucket/
Copying file://wrench1.jpg [Content-Type=image/jpeg]...
Copying file://wrench2.jpg [Content-Type=image/jpeg]...
/ [2/2 files][ 1.0 MiB/ 1.0 MiB] 100% Done
Operation completed over 2 objects/1.0 MiB.
我确认它们在控制台中,然后再次列出我安装的存储桶。它们是可见的,我可以阅读它们:
$ ls -l ~/mnt
total 1049
-rw-r--r-- 1 me me 432451 Nov 18 19:09 wrench1.jpg
-rw-r--r-- 1 me me 640526 Nov 18 19:09 wrench2.jpg
me@cloudshell:~ (whatever) cksum mnt/wrench1.jpg
3659533210 432451 mnt/wrench1.jpg
me@cloudshell:~ (whatever)$
似乎文件在顶层可见,但我不知道如何使目录及其内容可见。对于像我这样的老 Unix 人来说,Web 界面非常令人困惑,他们希望rw-r--r--
在查看长列表时看到类似的东西,并chmod 0644 ...
在看起来不正确时执行它。如何使我的 2000-09 对象/文件夹/目录和(递归)其全部内容可见?最终,我希望它对 GCP 托管的 Flask Web 应用程序可见(也归我所有,因此不一定公开可见)。
根据这个相关线程,
gcsfuse
默认情况下可能不会显示不是直接创建的目录。我尝试执行您描述的确切步骤,并且我的目录从已安装的文件夹中不可见(顶级文件确实显示正确)。相同的答案解释了使用--implicit-dirs
标志会更改此行为以显示目录。我使用该标志创建了另一个挂载,并且从 Cloud Shell 中可以看到这些文件夹:为了将存储桶挂载到目录上,我使用了
gcsfuse
文档,其中详细介绍了挂载过程。查看使用此标志可能产生的副作用很重要,例如额外的 API 调用。