使用Google Cloud SDK Shell从GCS下载数据失败,原命令突发报错求助
解决gsutil下载GCS目录时WinError 123的问题
问题根源
报错[WinError 123] 文件名、目录名或卷标语法不正确: C:\GCS\CBB_Cutler Server\E:',核心原因是GCS存储桶里的文件路径包含Windows驱动器前缀(比如E:\)。当gsutil递归下载时,会直接把这个前缀当作子目录名创建,但Windows不允许子目录名是E:这种驱动器号格式,所以触发语法错误。
排查与解决步骤
1. 确认GCS中的路径结构
执行以下命令,查看存储桶内的文件路径细节:
gsutil ls -r "gs://cloudberrybackup12febbf3-0864-42a2-bd04-2f8cbc97a94d/CBB_Cutler Server"
如果输出里出现类似gs://xxx/CBB_Cutler Server/E:/xxx/xxx.txt的路径,即可确认问题所在。
2. 两种可行解决办法
办法一:下载时替换非法路径(无需修改GCS内容)
用PowerShell遍历所有文件,自动替换路径中的驱动器前缀:
gsutil ls -r "gs://cloudberrybackup12febbf3-0864-42a2-bd04-2f8cbc97a94d/CBB_Cutler Server" | ForEach-Object { $gcsPath = $_ # 将路径中的E:/替换为自定义合法目录名,比如Volume_E $localPath = $gcsPath -replace "gs://cloudberrybackup12febbf3-0864-42a2-bd04-2f8cbc97a94d/CBB_Cutler Server/E:/", "C:\GCS\CBB_Cutler Server\Volume_E\" gsutil cp $gcsPath $localPath }
该脚本会逐个下载文件并修正本地路径,避免创建非法目录。
办法二:重命名GCS中的路径(需拥有修改权限)
如果有权限修改GCS存储内容,先批量重命名带驱动器号的路径:
gsutil mv "gs://cloudberrybackup12febbf3-0864-42a2-bd04-2f8cbc97a94d/CBB_Cutler Server/E:/*" "gs://cloudberrybackup12febbf3-0864-42a2-bd04-2f8cbc97a94d/CBB_Cutler Server/Volume_E/*"
重命名完成后,使用修正后的标准命令下载(注意将原命令中的全角–r替换为半角-r):
gsutil -m cp -r "gs://cloudberrybackup12febbf3-0864-42a2-bd04-2f8cbc97a94d/CBB_Cutler Server" "C:\GCS"
3. 额外注意
Windows文件路径不允许包含<, >, :, ", /, \, |, ?, *这些字符,若GCS中存在此类路径,下载时都会触发WinError 123,需提前处理。
内容的提问来源于stack exchange,提问作者omblancas
相关产品推荐
相关产品推荐

