将gsutil输出到文件

时间:2013-05-29 21:00:42

标签: pipe google-cloud-storage gsutil

问候StackOverflow,

我正在开发一个Windows上的小项目,需要读取GSUTIL复制功能的输出。问题是,复制功能的输出似乎不能通过标准输出工作。此外,GSUTIL的行为不一致:管道输出不能与复制功能一起使用,但使用列表功能确实有效。

当我在命令提示符中使用以下命令时,输出将显示在命令提示符中,但不会重定向到文本文件。此命令无法正常工作:

C:\gsutil> python gsutil cp "file://C:/test_files/*" gs://gs_teststore/ > gsutil_cp.txt

另一方面,当我使用list函数(ls)时,输出确实通过标准输出工作,并且我希望能够工作:

C:\gsutil> python gsutil ls gs://gs_teststore/ > gsutil_ls.txt

有没有办法从GSUTIL的复制功能中捕获输出?

2 个答案:

答案 0 :(得分:8)

您可以使用-L选项生成已复制的所有文件的清单文件。来自the documentation

  

-L< file>输出清单日志文件,其中包含有关已复制的每个项目的详细信息。此清单包含以下内容   每个项目的信息:

     
      
  • 来源路径。
  •   
  • 目的地路径。
  •   
  • 来源大小。
  •   
  • 转移字节。
  •   
  • MD5哈希。
  •   
  • UTC日期和时间转移以ISO 8601格式启动。
  •   
  • UTC日期和时间转移以ISO 8601格式完成。
  •   
  • 如果执行了可恢复上传,则上传ID。
  •   
  • 尝试上传,成功或失败的最终结果。
  •   
  • 失败详情,如果有的话。
  •   

一个具体的例子:

$ echo "hey" | gsutil cp -L manifest.txt - gs://mybucket/hey.txt
Copying from <STDIN> [Content-Type=application/octet-stream]...

$ cat manifest.txt 
Source,Destination,Start,End,Md5,UploadId,Source Size,Bytes Transferred,Result,Description
file://-,gs://mybucket/hey.txt,2013-05-29T21:29:31.847715Z,2013-05-29T21:29:32.115624Z,081ecc5e6dd6ba0d150fc4bc0e62ec50,,,0,OK,

答案 1 :(得分:8)

Jeff关于使用gsutil cp -L的答案是您正在尝试做的正确解决方案。

只是为了补充一些细节,说明为什么你无法按照预期的方式捕获gsutil cp输出:gsutil将状态消息输出到stderr,只有当有问题的输出是命令的目的时才输出到stdout你在跑。因此,例如,gsutil ls输出到stdout,因为输出是命令的目的,而相反,gsutil cp命令的进度指示器消息实际上是关于底层目的的状态(正在复制数据) - 所以输出转到stderr。

Mike Schwartz,谷歌云存储团队