在我的笔记本电脑上,有一个目录,其中包含一个子目录,而子目录又包含一堆 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 应用程序可见(也归我所有,因此不一定公开可见)。
答案1
答案2
我通过随后使用 mkdir 命令创建目录结构解决了此问题,例如:
使用 gsutil 命令 (gsutil rsync -r /test/gs:bucket/) 将测试目录及其内容复制到存储桶:
/测试/文本0.txt /测试/文本1.txt
使用安装了存储桶的虚拟机,我使用命令 mkdir /mountedbucketdir/test 重新创建了目录
这样,所有文件都会立即可见,而无需使用 --implicit-dirs 并处理其问题。重新创建目录结构很不方便,但这可以让你摆脱 GCP 的操作和延迟负担。