gsutil下载失败如何恢复下载

  • 1 问题描述
  • 2 再次运行原指令
  • 3 找出失败文件批量下载
  • 3.1 获得文件列表
  • 3.2 制作gsutil下载指令
  • 3.3 下载
  • 4 补充说明


1 问题描述

  使用gsutil下载过程中,由于网络等因素导致下载失败,通常情况下会报出如下错误,但是并没有给出具体哪些文件失败,这应该如何解决呢?

CommandException: 177 files/objects could not be transferred.ETA 42:35:46

2 再次运行原指令

  其实gsutil有自动续传的功能,可以直接再次运行之前应用的下载指令进行下载。但是经过测试,这个功能应用需要谨慎,因为不是所有情况都能使用再次运行进行恢复,有时候他会将所有文件(包括已经下载完成的)从头重新下载,故不推荐这种方案。

3 找出失败文件批量下载

  在gsutil批量下载的本地的文件夹内,下载过程中会出现两种文件,一种文件是正常的选中下载的文件,另外一种是{选中的文件名}_.gstmp格式的文件。.gstmp文件是还没有下载完成的文件的缓存文件,你所失败的文件一般都会产生一个.gstmp文件,故我们想要继续下载它们可以按照以下思路完成:

  1. 获得未下载完成的文件列表
  2. 制作一个批量下载多文件的gsutil指令
  3. 进行下载

下面我们详细讲述一下实现方法

3.1 获得文件列表

  如果下载过程中断,那么可能没有被下载的文件还没有开始被写成.gstmp文件,此时你需要去google云服务器上,找到所有文件列表然后排除已经完成下载的文件。这种情况我没有遇到过,我仅对所有未下载文件均已经有了自己对应的.gstmp文件的这种情况进行阐述。

  1. 打开本地文件的保存目录Ctrl+A全选文件;
  2. 打开LibreOffice Calc(Windows下也可以使用Excel);
  3. Ctrl+V粘贴文本,完成后所有文件应该都会分行排列成一列;
  4. 如下图所示,1.选中文字整列→2.点击“筛选”→3.点击下拉菜单→4.输入包含的文字“_.gstmp”→5.确定,即将所有.gstmp文件行筛选得出;
  5. 下载失败JavaException_google

  6. 选中最上面的单元格,同时按Ctrl+Shift+↓选中所有筛选出来的文字
  7. 新建一个表格页,粘贴
  8. 进行文字分列,1.选中整列→2.单击“数据”→3.单击“文字分列”
  9. 下载失败JavaException_断点续传_02

  10. 设置分列关键字符如下图所示,1.选中“分隔”→2.选择“其他”→3.输入“/”→4.单击“确定”;
  11. 下载失败JavaException_gsutil_03

  12. 分列效果如下,然后选中前面不需要的列→“删除列”;
  13. 下载失败JavaException_断点续传_04

  14. Ctrl+H调出“替换”,使用替换功能删除.gstmp,以及添加字符以保证符合gsutil的语法规则
  15. 下载失败JavaException_gsutil_05


  16. 下载失败JavaException_gsutil_06

3.2 制作gsutil下载指令

  1. 最终各文件的正确网址如下所示,选中整列→Ctrl+C复制
  2. 打开“文本编辑器”粘贴,并使其符合gsutil多文件批量下载的语法,如下所示。注意“\”是换行标志“…”是笔者加的省略标志。关于gsutil的cp命令可以参考官方手册。
gsutil -m cp \
  "gs://waymo_open_dataset_v_1_3_2/individual_files/validation/segment-5973788713714489548_2179_770_2199_770_with_camera_labels.tfrecord" \
...
  "gs://waymo_open_dataset_v_1_3_2/individual_files/validation/segment-2895681525868621979_480_000_500_000_with_camera_labels.tfrecord" \
  .

3.3 下载

  1. 将上述文本占贴进终端进行下载,注意由于google云服务器在国外,故需要对网络进行处理。

另外,这里只是举一个例子,可以有很多方法实现同样的效果,大家可以自行探索。

4 补充说明

  纵使我们可以继续下载,但是经过测试这些.gstmp文件已经下载的部分还是没有利用上,也就是说是从0下载。那么该如何让它能充分利用.gstmp文件呢?或许可以从~/.gsutil/tracker-files/路径下的下载跟踪文件.etag文件下手,但是笔者并没有进行实验,读者可以进行测试,并留言告诉大家。