我在 GCP 中下载整个文件夹时遇到问题。如何下载整个存储桶?我在 GCP 外壳环境中运行以下代码:
gsutil -m cp -R gs://my-uniquename-bucket ./C:UsersMynameDesktopBucket
我收到一条错误消息:">命令异常:目标 URL 必须为 cp 命令的多源形式命名目录、存储桶或存储桶子目录。命令异常:无法传输 7 个文件/对象。
有人可以指出代码行中的错误吗?
下载整个存储桶 您必须安装谷歌云开发工具包
然后运行此命令
gsutil -m cp -R gs://project-bucket-name path/to/local
其中path/to/local
是计算机的本地存储路径
错误位于错误消息指定的destination URL
内。
我在 GCP 外壳环境中运行此代码
请记住,您是从Cloud Shell运行命令,而不是在本地终端或 Windows 命令行中运行命令。因此,它抛出该错误,因为它找不到您指定的路径。如果您检查 Cloud Shell 的文件系统/结构,它更类似于 Unix 环境,您可以在其中指定目标,如下所示:~/bucketfiles/
。即使是一个简单的gsutil -m cp -R gs://bucket-name.appspot.com ./
也可以工作,因为Cloud Shell可以识别当前目录./
目录。
此问题的解决方法是在 Windows 命令行上执行该命令。您必须事先安装Google Cloud SDK。
或者,这也可以在Cloud Shell中完成,尽管需要额外的步骤:
- 通过运行
gsutil -m cp -R gs://bucket-name ~/
下载存储桶对象,这会将其下载到 Cloud Shell 的主目录中 - 将
~/
(主)目录中下载的文件从 Cloud Shell 传输到本地计算机,通过用户界面或运行gcloud alpha cloud-shell scp
您的目标路径无效:
./C:UsersMynameDesktopBucket
更改为:
/Users/Myname/Desktop/Bucket
C:
是保留的设备名称。不能在相对路径中指定保留的设备名称。./C:
无效。
没有一键式解决方案可以通过 Cloud Shell 将完整的存储桶下载到本地计算机。
对于像您这样的环境(仅使用 Cloud Shell 界面,未在本地系统上安装gcloud
),最佳选择是执行一系列步骤:
- 云壳环境中下载整个存储桶
- 压缩存储桶的内容
- 上传压缩文件
- 通过浏览器下载文件
- 收拾:
- 删除本地文件(在 Cloud Shell 上下文中为本地文件)
- 删除压缩的存储桶文件
- 在本地解压缩存储桶
这样做的好处是只需在本地计算机上下载一个文件。
对于非开发人员来说,这似乎有很多步骤,但实际上非常简单:
首先,在 Cloud Shell 上运行以下命令:
mkdir /tmp/bucket-contents/
gsutil -m cp -R gs://my-uniquename-bucket /tmp/bucket-contents/
pushd /tmp/bucket-contents/
zip -r /tmp/zipped-bucket.zip .
popd
gsutil cp /tmp/zipped-bucket.zip gs://my-uniquename-bucket/zipped-bucket.zip
然后,通过以下链接下载压缩文件:https://storage.cloud.google.com/my-uniquename-bucket/zipped-bucket.zip
最后,清理:
rm -rf /tmp/bucket-contents
rm /tmp/zipped-bucket.zip
gsutil rm gs://my-uniquename-bucket/zipped-bucket.zip
完成这些步骤后,您将在本地系统中拥有一个zipped-bucket.zip
文件,您可以使用您选择的工具解压缩该文件。
请注意,如果您的存储桶中有太多数据,并且 Cloud Shell 环境无法存储所有数据,则这可能不起作用,但您可以对文件夹而不是存储桶重复相同的步骤以获得可管理的大小。