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
文件,故我们想要继续下载它们可以按照以下思路完成:
- 获得未下载完成的文件列表
- 制作一个批量下载多文件的gsutil指令
- 进行下载
下面我们详细讲述一下实现方法
3.1 获得文件列表
如果下载过程中断,那么可能没有被下载的文件还没有开始被写成.gstmp
文件,此时你需要去google云服务器上,找到所有文件列表然后排除已经完成下载的文件。这种情况我没有遇到过,我仅对所有未下载文件均已经有了自己对应的.gstmp
文件的这种情况进行阐述。
- 打开本地文件的保存目录
Ctrl+A
全选文件; - 打开LibreOffice Calc(Windows下也可以使用Excel);
Ctrl+V
粘贴文本,完成后所有文件应该都会分行排列成一列;- 如下图所示,1.选中文字整列→2.点击“筛选”→3.点击下拉菜单→4.输入包含的文字“_.gstmp”→5.确定,即将所有
.gstmp
文件行筛选得出; - 选中最上面的单元格,同时按
Ctrl+Shift+↓
选中所有筛选出来的文字 - 新建一个表格页,粘贴
- 进行文字分列,1.选中整列→2.单击“数据”→3.单击“文字分列”
- 设置分列关键字符如下图所示,1.选中“分隔”→2.选择“其他”→3.输入“/”→4.单击“确定”;
- 分列效果如下,然后选中前面不需要的列→“删除列”;
Ctrl+H
调出“替换”,使用替换功能删除.gstmp
,以及添加字符以保证符合gsutil的语法规则
3.2 制作gsutil下载指令
- 最终各文件的正确网址如下所示,选中整列→
Ctrl+C
复制 - 打开“文本编辑器”粘贴,并使其符合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 下载
- 将上述文本占贴进终端进行下载,注意由于google云服务器在国外,故需要对网络进行处理。
另外,这里只是举一个例子,可以有很多方法实现同样的效果,大家可以自行探索。
4 补充说明
纵使我们可以继续下载,但是经过测试这些.gstmp
文件已经下载的部分还是没有利用上,也就是说是从0下载。那么该如何让它能充分利用.gstmp
文件呢?或许可以从~/.gsutil/tracker-files/
路径下的下载跟踪文件.etag
文件下手,但是笔者并没有进行实验,读者可以进行测试,并留言告诉大家。