Curl 在 OpenVMS 上的使用

Curl usage on OpenVMS

我们在 openvms 系统上使用 curl 成功下载了许多文件 - 没问题。我们有一个特别大的 ZIP 文件,我想尝试使用 curl 的 --range 标志并行下载多部分,以获取文件的不同部分,然后我们可以将其附加到一个大 ZIP。

所以作为测试,我在大约 50 Mbtyes 的较小文件上进行了测试。使用这一系列命令,它完美地工作:请注意,curl 命令通常是 运行 并行的,而不是像所示的那样一个接一个地执行

$ curl --range 0-5000000 bigfile.zip -o part1.zip 
$ curl --range 5000001-50000000 bigfile.zip -o part2.zip 

当上面两个命令完成后我做

$ copy part1.zip,part2.zip final.zip

并且以下解压缩按预期工作

$ unzip -ao final.zip  

好的,所以我想我现在会尝试将它分成 3 种方式,例如

$ curl --range 0-5000000 bigfile.zip -o part1.zip  
$ curl --range 5000001-30000000 bigfile.zip -o part2.zip 
$ curl --range 30000001-50000000 bigfile.zip -o part3.zip 

按预期生成了三个 zip,但这次是在

之后
$ copy part1.zip,part2.zip,part3.zip final.zip

解压后我得到....

$ unzip -ao final.zip
Archive: final.zip;1
**warning final.zip;1:  1 extra byte at beginning or within zipfile**
  (attempting to process anyway)
file #1:  bad zipfile offset (local header sig):  1  
(attempting to re-compensate)
  inflating: CompanyRel.txt          [text]
  error:  invalid compressed data to inflate
[ WriteRecord: sys$put failed ]
[ %RMS-F-RSZ, invalid record size ]
[ %NONAME-W-NOMSG, Message number 00000000 ]

欢迎就如何修复提出任何建议

您的part*.zip文件很可能是记录格式Stream_LF, 您可以使用 DIR/FULL 命令进行检查。无论出于何种原因,VMS 复制命令都会在源文件列表中第一个逗号(或加号)之后的每个文件的内容中附加一个换行符(上面的 LF)。您可以从两部分中检查成功连接的 zip 文件。新文件长了一个字节,也就是末尾的 LF。

末尾的附加 LF 不会影响解压缩。但是列表中的三个文件有两个 LF,一个在第二部分之后,一个在最后。一个 "in the middle" 是一个解压缩抱怨:文件偏移量错误等

用curl复制文件后,尝试设置不同的记录格式:udf。像

$ set file/attribute=(rfm=udf) part%.zip

然后用copy做拼接。这应该可以防止复制命令附加 LF 并且应该使解压缩快乐。