Как создать tar-файл gnu, который может быть извлечен с помощью соляристой смолы

Я поддерживаю устаревшую систему cygwin (с GNU tar v1.21) и устаревшую систему Solaris 9. Конфигурация системы Solaris 9 является фиксированной и не может быть обновлена ​​(т.е. я не могу установить gnu tar для Solaris).

Я пытаюсь создать tarball в системе cygwin, которая может быть извлечена из системы Solaris 9, но, к сожалению, структура каталогов (которая также исправлена ​​и не может быть переименована) плюс имена файлов превышают 100 символов, и я столкнулся с Великими Тарскими войнами прошлого тысячелетия. В системе Solaris существует большая (консервативная) база данных, поэтому предпочтительным является решение, использующее конфигурацию Solaris.

Вот ошибки, которые я испытываю.

Создание tar на cygwin:

$ tar -cf dir.tar dir 

или

 $ tar -c --posix -f dir.tar dir 

Дает следующее в Solaris:

 $ tar -xif dir.tar tar: directory checksum errors 

И имена файлов в каталоге усекаются. (т.е. игнорирование ошибок контрольной суммы не помогает)

Как создать tarball с длинными именами путей, используя GNU tar, которые могут быть извлечены с помощью Solaris tar?

Редактировать # 2: Невозможно использовать Шилли Тар (звезда)

Похоже, что Йорг Шиллинг смог подражать формату Solaris 7/8/9 tar и предлагает вариант suntar для создания suntar Solaris с использованием звезды .

К сожалению, star не доступна на cygwin. 🙁

Редактировать # 1: Использование –format = posix дает ошибки при извлечении

Ошибки при извлечении –format = posix gnu tarballs с использованием pax на Solaris 9

На cygwin:

 $ ls example/this_is_a_path_name_greater_than_one_hundred_characters/when_combined_with_this_file_name_which_is_also_rather_long.txt | wc -m 128 $ tar -c --format=posix -f example.tar example 

В Solaris:

 $ pax -r -f example.tar pax: ./PaxHeaders.4440/example : Unknown filetype pax: example/PaxHeaders.4440/this_is_a_path_name_greater_than_one_hundred_characters : Unknown filetype pax: example/this_is_a_path_name_greater_than_one_hundred_characters/PaxHeaders.4440/when_combined_with_t : Unknown filetype 

Аналогичные ошибки приводятся при извлечении с использованием Solaris tar.

  • scp изменение разрешений в каталоге / tmp
  • Как вы просматриваете файл sql.gz как обычный текстовый SQL из командной строки?
  • * .tar.gz резервное копирование
  • распаковать / распаковать файлы с помощью Curl на ftp-сервере
  • Архивирование на удаленную машину с помощью tar / cpio и ssh?
  • В настоящее время Tar читает файл 2GB, и я удалил его единственную ссылку. Как остановить его на вечность?
  • Извлечение нескольких файлов из tar на удаленный хост
  • tar -c сообщения об ошибках и исходные файлы?
  • 2 Solutions collect form web for “Как создать tar-файл gnu, который может быть извлечен с помощью соляристой смолы”

    GNU tar tar предлагает tar -c --format=posix или tar -c --format=pax – единственный способ создать переносимый файл tar, содержащий имена путей длиной более 255 символов.

    На странице софта Solaris не упоминается поддержка этого формата, но страница руководства для пользователей Solaris .

    Поэтому сначала я попытаюсь создать архив в вашей системе Cygwin (или Linux) с помощью tar -c --format=posix -f dir.tar dir и извлечь его в вашей системе Solaris с помощью pax -r -x pax -f dir.tar или, вероятно, просто pax -r -f dir.tar .

    В качестве альтернативы, если у вас установлена cpio на обеих системах, похоже, что формат crc поддерживает 1 crc символьных пути в обеих системах. Это выглядело бы как find -L dir | cpio -o -H crc > dir.cpio find -L dir | cpio -o -H crc > dir.cpio для создания и cpio -i -d < dir.cpio чтобы извлечь его.

    Наконец, вы можете попробовать добавить флаг -i чтобы игнорировать ошибки контрольной суммы каталога при извлечении на Solaris, например tar -x -i -f dir.tar . Проблемы с контрольной суммой говорят, что это может потребоваться, если любое из имен файлов в архиве tar не является ASCII.

    Другое чтение:

    • Создание архивов tar более переносимо
    • Сравнение tar и cpio

    Solaris tar и GNU tar имеют разные интерпретации posix, но оба поддерживают ustar, который, в свою очередь, поддерживает длинные (ish) пути .

    Использование GNU tar на cygwin:

     $ tar -c --format=ustar -f dir.tar dir 

    Это создает tarball, который с радостью извлекается на Solaris 9 без ошибок. Возможно, это не универсальное решение, а решение, которое подходит для ограниченного пространства решений. Похоже, что 80-е годы были полезны!

    Linux и Unix - лучшая ОС в мире.