将Google Cloud Bucket数据复制到本地时遇“No URLs matched”等错误求助
我来帮你逐个解决这两个gsutil命令遇到的问题:
第一个错误:CommandException: No URLs matched: appengine.googleapis.com
你执行的命令是gsutil cp -r appengine.googleapis.com gs://my-bucket,但这里存在两个核心问题:
- 你说要下载GCS桶里的文件夹,但这个命令的方向搞反了——它是把本地的
appengine.googleapis.com文件夹上传到gs://my-bucket,而不是从桶里下载。如果是下载,应该把GCS路径作为源,本地路径作为目标。 - 就算你是想上传,
appengine.googleapis.com没有加上gs://前缀,gsutil会默认认为这是本地文件/文件夹,但你本地不存在这个名称的路径,所以才会报错“没有匹配的URL”。
正确的下载命令应该是这样的(把[你的桶名]换成实际的桶名称,./本地目标路径换成你想保存到的本地文件夹):
gsutil cp -r gs://[你的桶名]/appengine.googleapis.com ./本地目标路径
第二个错误:IOError: [Errno 22] invalid mode ('ab') or filename: ...14:00...
这个问题完全是Windows系统的文件名限制导致的:Windows不允许文件名包含冒号(:),而你要下载的GCS对象路径里有14:00这类带冒号的部分,当gsutil尝试在本地创建对应文件时,就触发了这个错误。
给你两个实用的解决方法:
- 切换到Linux/macOS环境下载:这些系统支持文件名包含冒号,直接执行原命令就能正常下载,不会有任何问题。
- 在Windows上用命令处理非法字符:
- 方法一:使用
gsutil cp的--rename参数,把文件名里的冒号替换成合法字符(比如横杠):gsutil cp -r gs://logsnotimelimit/** ./logsnotimelimit --rename 's/:/-/g' - 方法二:用
gsutil rsync命令,它会自动替换Windows不允许的非法字符(比如把冒号换成下划线):gsutil rsync -r gs://logsnotimelimit ./logsnotimelimit
- 方法一:使用
内容的提问来源于stack exchange,提问作者Sudhanshu Gaur
相关产品推荐
相关产品推荐

