我正在使用gsutil rsync,从s3复制到gs,并且在gsutil进入存储桶之后我收到以下错误:
列出s3时遇到不可重试的异常:// [bucket] /:BadRequestException:400无 CommandException:捕获不可重试的异常 - 中止rsync
这是不受欢迎的行为,因为我可以手动从s3复制到gs其他文件。我不能通过使用“-C”开关来绕过,因为这不是复制时的错误。
编辑:出现如果“#”在s3中的文件名中,则gsutil将其替换为“?versionId =”。例如:
S3文件名:Updaet#2_Montgomery Building Permits.xlsx
GS在调试输出中列出:Updaet?versionId = 2_Montgomery Building Permits.xlsx
答案 0 :(得分:2)
您可以通过运行
来提供有关此故障的更多详细信息gsutil -D rsync your-source your-destination
然后摘录显示错误的HTTP请求/响应?当你这样做时,请编辑授权:标题。
如果您不想在公共论坛上发布请求的详细信息,可以发送电子邮件至gs-team@google.com
感谢。
答案 1 :(得分:0)
同样的事情昨天发生在我身上,而且'#'确实是问题所在。
问题似乎是boto,不一定是gsutil,尽管我不确切知道修复的位置。 BotoTranslation._StorageUriForObject()
调用boto.storage_uri()
,使用VERSION_RE ('(?P<versionless_uri_str>.+)#(?P<version_id>.+)$')
在uri_str / path中查找版本。如果对象名称包含&#39;#&#39;,则其后的所有内容都将被视为S3版本ID。我没有看到目前有任何方法可以逃脱或编码#&#39;#&#39;因此它不会被视为版本分隔符。