Как создать 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.

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-е годы были полезны!

  • Восстановить поврежденный .tar, сохраненный с Android
  • ошибка разрушенной трубы
  • tar выходы с bzip2: (stdin): конечный мусор после EOF игнорируется после извлечения
  • Инкрементальный сценарий резервного копирования (общий хостинг)
  • Команда tar генерирует ошибку в сценарии оболочки
  • установить уровень сжатия с помощью nice и tar
  • Что использовать для резервного копирования файлов, сохраняя списки ACL?
  • tar сжимает папку, но создает вложенную структуру
  • сжатие tar без структуры каталогов
  • Архивирование на удаленную машину с помощью tar / cpio и ssh?
  • Установка файла tar.gz без цели установки
  • Midnight Commander, используя дату в меню пользователя
  • Linux и Unix - лучшая ОС в мире.