使用gsutil向Google Cloud Storage上传大文件夹遇故障,求解决思路
解决Windows下gsutil上传带空格文件夹到Google Cloud Storage的问题
我之前在Windows虚拟机上用gsutil传带空格的文件夹时也踩过一模一样的坑,给你梳理下问题出在哪以及怎么解决:
先分析你遇到的两个错误
第一个命令
gsutil cp C:\Folder\Sub folder - name gs://bucketname/
Windows命令行里,空格会被当成参数分隔符,所以系统会把Sub、folder、-、name当成独立的参数,gsutil自然找不到C:\Folder这个路径(你实际要指定的是完整的C:\Folder\Sub folder - name文件夹)。第二个命令
gsutil cp C:"Folder\Sub folder - name" gs://bucketname/
你只给路径的后半部分加了引号,Windows命令行无法正确解析这种不完整的带引号路径,导致整个路径识别错误,进而把后面的gs://bucketname/当成了不符合要求的参数,才会出现“unrecognised scheme name gs”的报错。
正确的上传命令
要解决这个问题,你需要做到两点:
- 把整个完整的本地文件夹路径用双引号括起来,让命令行把它当成一个完整的参数
- 上传文件夹必须加上
-r参数,告诉gsutil要递归上传文件夹里的所有内容(否则gsutil会把文件夹当成单个文件处理,直接报错)
正确的命令应该是这样的:
gsutil cp -r "C:\Folder\Sub folder - name" gs://bucketname/
额外的优化和检查建议
- 如果你的文件夹特别大,建议加上
-m参数启用并行上传,能大幅提升上传速度:gsutil -m cp -r "C:\Folder\Sub folder - name" gs://bucketname/ - 先确认本地路径是否正确:可以在命令行里输入
dir "C:\Folder\Sub folder - name",如果能正常列出文件夹里的内容,说明路径没问题 - 确认gsutil已经完成身份验证:可以运行
gsutil ls gs://bucketname/测试,如果能列出存储桶里的内容,说明权限配置正常
内容的提问来源于stack exchange,提问作者user12867841




