找不到中心目录签名

时间:2017-08-03 23:17:15

标签: curl zip unzip

我使用linux zip命令创建了zip文件并将其上传到我的google驱动器中。当我尝试使用curl和unzip命令(使用bash文件)下载并解压缩压缩文件时,它会给我以下错误。

Archive:  pretrained_models.zip
  End-of-central-directory signature not found.  Either this file is not
  a zipfile, or it constitutes one disk of a multi-part archive.  In the
  latter case the central directory and zipfile comment will be found on
  the last disk(s) of this archive.
unzip:  cannot find zipfile directory in one of pretrained_models.zip or
        pretrained_models.zip.zip, and cannot find pretrained_models.zip.ZIP, period.

有人可以建议解决此问题的任何解决方法吗?

如果有人想重现错误,我正在共享.sh文件。

#!/bin/bash
pretrained='https://drive.google.com/uc?export=download&id=0B8ZGlkqDw7hFSm1MQ2FDVTZCTjA' 
# download pretrained models.
curl -o pretrained_models.zip $pretrained
unzip pretrained_models.zip
rm pretrained_models.zip

该文件是公开共享的。对于完整性检查,您可以从here下载。

N.B。我在SO的其他社区看过相关帖子,其中一些建议使用不同的文件扩展名,但我想坚持使用zip文件。

1 个答案:

答案 0 :(得分:1)

下载Google云端硬盘上的共享文件时,需要按文件大小更改下载方法。结果发现,更改方法时文件大小的边界约为 40MB

修改过的脚本:

1。文件大小< 40MB

#!/bin/bash
filename="pretrained_models.zip"
fileid="0B8ZGlkqDw7hFSm1MQ2FDVTZCTjA"
curl -L -o ${filename} "https://drive.google.com/uc?export=download&id=${fileid}"

2。文件大小> 40MB

当它尝试下载超过40MB的文件时,Google会说要从以下网址下载。

<a id="uc-download-link" class="goog-inline-block jfk-button jfk-button-action" href="/uc?export=download&amp;confirm=####&amp;id=### file ID ###">download</a>

包含confirm=####的查询对于下载大尺寸文件非常重要。为了从HTML检索查询,它使用pup

#!/bin/bash
filename="pretrained_models.zip"
fileid="0B8ZGlkqDw7hFSm1MQ2FDVTZCTjA"
query=`curl -c ./cookie.txt -s -L "https://drive.google.com/uc?export=download&id=${fileid}" | pup 'a#uc-download-link attr{href}' | sed -e 's/amp;//g'`
curl -b ./cookie.txt -L -o ${filename} "https://drive.google.com${query}"