Рылся по своим старым заметкам и нашел материал, который потенциально может быть кому-нибудь интересен хотя бы и в исторических целях. Частично на форум я уже выносил его на обсуждение, но в укороченом виде. Первичный материал в более расширенном варианте с элементами tutorial.
Исследуя вопрос, я накопал 5 вариантов архивации, которые можно назвать относительно живучими:
- FCOPY
- ZIN
- TERSE
- VMARC
- COPY (PACK
FCOPY
Команда FCOPY может выполнять как обычную задачу копирования одного файла в другой, так и упаковку одного или нескольких файлов в более емкий формат. Вообще говоря, FCOPY в стандартную поставку zVM/CMS не входит, это утилита, которую надо ставить отдельно (последний релиз от 2000 года). Поэтому ее надо использовать, если вы твердо уверены, что на целевой машине она тоже есть.
На момент актуальности вопроса меня интересовала задача объединения и сжатие файлов в один архив или packlib, чтобы потом это передать на другую машину.
Например, чтобы собрать файлы с A-диска в один архив MYDISK PACKLIB A, надо выполнить команду:
Код
fcopy * * A MYDISK PACKLIB A (INS
После этого разжать архив обратно можно с помощью команды
Код
fcopy MYDISK PACKLIB A (SELECT *
Здесь "*" - означает выбрать все файлы из архива, но, вообще говоря, можно указать и конкретный целевой файл.
Код
fcopy MYDISK PACKLIB A (SELECT (MYFILE FILE
ZIP
Классический для PC архиватор может быть также доступен в zVM/CMS. По умолчанию его в наборе архиваторов нет, чтобы им воспользоваться необходимо скопировать ZIP MODULE. Ясно, что основное назначение этого архиватора использовать платформо-совместимый архиватор для передачи файлов. Для того, чтобы передавать архивы между VM заморачиваться не стоит.
Этот ZIP является свободно распространяемой версией Info-ZIP, который поддерживает широкий набор платформ, в том числе VM/MVS. Можно как скомпилировать самостоятельно, так и скачать уже готовый модуль. Например, можно взять модуль с ftp проекта. Там же есть подробная инструкция по установке. Если вкратце, то необходимо сделать два пункта:
1. Переслать файл на VM.
В случае использования Personal Communication надо обязательно посмотреть настройки типа binary. А то он по умолчанию зачастую идет с V-форматом. Надо выставить F и LRECL=1024. Если пересылать через командную строчку, то в readme есть все указания, что сделать.
2. Распаковать файл.
Код
COPY zip mod a zip module a (UNPACK OLDDATE REPLACE
Здесь zip mod a надо заменить на конкретное имя переданного модуля
К сожалению, в отличии от *nix системы, CMS не раскрывает символ "*", а оставляет его обработку на совесть приложения (фишка ОС). Поэтому использовать вместе с командой ZIP общие символы не получится. Хелп по аргументам команды привычно выдается, выполнив zip без всего.
Для того, чтобы архвировать один файл, достаточно набрать команду:
Код
zip -a myzip.zip.a myfile.file.a
Здесь,
myzip.zip.a - имя создаваемого архива. На А-диске он будет сохранен как MYZIP ZIP A.
myfile.file.a - имя файла, который надо поместить в архив.
-a - указывает, что при помещении в архив символы должны быть транслированы в ASCII кодировку.
Если архив уже существует, то новый файл будет просто в него добавлен. Необходимость перекодировки в ASCII может вызвать не очень корректное отображение оригинальных символов CMS, это надо учитывать.
Чтобы поместить группу файлов в zip-архив, можно использовать pipe.
Код
pipe cms listfile * * A | split | join 2 /./ | spec /zip -a myzip.zip.a / next 1-* next | cms | console
При передаче этого архива между VM и другой системой (например, PC), необхимо использовать бинарный режим (то есть помечать его как binary). На PC файл разархивируется стандартной ZIP-программой.
TERSE
Один из архиваторов, который поставляется в стандартной установке zVM/CMS. Имеет недостаток, что может архивировать только один файл в архив. Автоматическую конкатинацию команда не поддерживает. Поэтому использовать эту команду стоит тогда, когда вы плохо знаете, что есть на конечной CMS. TERSE входит в стандартную поставку zVM/CMS, поэтому есть у всех. На моей машине стояла версия 1.9.6 от 1993 года.
Типовое использование terse выглядит следующим образом:
Код
terse myfile file a mypack pack a
Здесь,
myfile file a - файл, который надо сжать
mypack pack a - имя результирующего архива
VMARC
VMARC - очень популярный архиватор для zVM. Очень много программ для zVM распространяется с помощью него. Однако, он может присутствовать не на всех машинах. Но это не мешает нам его добавить. Существует веб-страница, где представлено множество свободных к распространению утилит для zVM. Они заархивированны с помощью VMARC
Там же можно найти ссылку на vmarc.module, который и является архиватором, и vmarc.helpcms файл справки. Его надо передать на целевую VM как бинарный файл. Затем надо выполнить команду по корректировке структуры модулей и тулза будет готова к использованию:
Код
pipe < VMARC MODULE A | deblock cms | > VMARC MODULE A
pipe < VMARC HELPCMS A | deblock cms | > VMARC HELPCMS A
Для архивации используется команда:
Код
VMARC PACK * * A MYDISK PACK A
Команда сложит все файлы на минидиске А в один архив. После этого файл MYDISK PACK A можно передать на PC в бинарном режиме и распаковать там с помощью PC-версии архиватора.
Для распаковки используется команда:
Код
VMARC UNPK MYDISK PACK A
Ввиду популярности VMARC было написано большое количество портов, в том числе под Windows. Есть варианты с интерфейсом пользователя, которые позволяют легко и непринужденно выполнять укаковку и распаковку из архива.
COPY (PACK
Команда COPY так же поддерживает упаковку файлов. Для этого надо использовать опцию PACK.
Код
copy LOG FILE A MYPACK PACK A (pack
Однако команда COPY не поддерживает общих символов типа "*" при испльзовании опции PACK. Другим важным ограничением является то, что после упаковки файл нельзя модифицировать, иначе вы не сможете его распаковать.
Для разархивации надо использовать опцию UNPACK:
Код
copy MYPACK PACK A LOG FILE A (UNPACK
Сравнение различных архиваторов для текстовых файлов
Для сравнени я взял файл LOG FILE A, характеристики которого приведены ниже:
Код
LOG FILE A1 F 80 36541 714 4/13/2011
Он был пожат пятью различными способами для сравнения (возможно не все параметры оптимизации архивации были указаны):
Код
LOGPACK FCOPY A1 V 11392 46 77 4/13/2011
LOGPACK ZIP A1 F 1 279262 69 4/13/2011
LOGPACK TERSE A1 F 1024 302 76 4/13/2011
LOGPACK VMARC A1 F 80 7528 148 4/13/2011
LOGPACK COPY A1 F 1024 2069 518 4/13/2011
Интересно, но судя по результату, эффективнее всего поработал ZIP (69).
Безусловно, сравнение только по одному аспекту некорректно. Важны и другие параметры: совместимость, безопасность при переносе между системами, доступность, удобство и т.д. Терять половину эффективности на VMARC тоже неприятно (148 супротив 69 от ZIP и 76 от TERSE), но времена, когда каналы были настолько слабы, что приходилось бороться за каждый байт при архивации уже явно прошли. |