Использование Curl на OpenVMS

Мы используем curl в нашей системе openvms для успешной загрузки многих файлов — никаких проблем. У нас есть особенно большой ZIP-файл, который я хотел попробовать загрузить несколькими частями параллельно, используя флаг --range curl, чтобы получить разные части файла, которые мы затем можем добавить к одному большому ZIP-архиву.

Итак, в качестве теста я попробовал это на меньшем файле размером около 50 МБит. При использовании этой последовательности команд все работало отлично: обратите внимание, что команды 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 

Как и ожидалось, производятся три зипа, но на этот раз после

$ 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 ]

Любые предложения о том, как исправить, будут приветствоваться


person user2699504    schedule 14.01.2016    source источник
comment
(добро пожаловать в Stackoverflow). В будущем используйте инструмент {} в левом верхнем углу инструмента редактирования выделенного текста, чтобы правильно отформатировать его как код/данные/сообщения об ошибках/и т. д. Удачи.   -  person shellter    schedule 14.01.2016
comment
Итак, это на openvms с использованием DCL. Копирование объединяет почтовые индексы в один окончательный почтовый индекс (например, команду Unix CAT).   -  person user2699504    schedule 14.01.2016
comment
Ах, DCL, давно такого не видел ;-) . Я просто хотел подтвердить, что , является законной частью cmd. Я не знаю, какие утилиты доступны в openvms, которые могли бы помочь вам отладить эту проблему. Отметив, что у тега openvms всего 57 подписчиков, может быть, вам стоит поискать другие форумы поддержки пользователей в сети? Удачи!   -  person shellter    schedule 14.01.2016


Ответы (1)


Ваши файлы part*.zip, скорее всего, имеют формат записи Stream_LF, что можно проверить с помощью команды DIR/FULL. По какой-то причине команда копирования VMS добавляет перевод строки (приведенный выше LF) к содержимому каждого файла после первой запятой (или плюса) в списке исходных файлов. Вы можете проверить это для вашего успешно объединенного zip-файла из двух частей. Новый файл на один байт длиннее, и это LF в конце.

Этот дополнительный LF в конце не мешает разархивировать. Но при трех файлах в списке получается два LF, один после второй части и один в конце. И тот, что «посередине», — это тот, на который жалуется unzip: неправильные смещения файлов и т. Д.

После копирования файлов с помощью curl попробуйте установить другой формат записи: udf. Что-то вроде

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

затем выполните конкатенацию с копией. Это должно помешать команде копирования добавить LF и должно сделать распаковку счастливой.

person user2116290    schedule 14.01.2016
comment
Для подхода с поясом и подтяжками я рекомендую также использовать параметр -b для UNZIP. - person user2699504; 15.01.2016
comment
-b — это параметр вывода для распаковки, который в VMS перезаписывает формат записи по умолчанию Stream_LF (или формат записи, который был сохранен с помощью -V) форматом фиксированной длины. Для исходной задачи вам понадобится такой -b для curl. Но, насколько я вижу, использование копирования для объединения файлов фиксированной длины (где последняя запись заполняется лишь частично), похоже, также имеет проблемы. -- Что касается распаковки, если исходный zip-файл был создан на VMS, лучше всего создать его с параметром -V. В противном случае выходной формат по умолчанию Stream_LF обычно подходит даже для двоичных файлов. - person user2116290; 15.01.2016
comment
user2116290 У меня есть дополнительный вопрос, надеюсь, вы тоже поможете мне с ним. Я назову это «Другое использование завитка в вопросе openvms». - person user2699504; 15.01.2016