Команда Tar версия Solaris для файлов размером более 2 ГБ

У нас есть несколько файлов размером более 2 ГБ, тарированных с помощью команды tar версии UNIX (SunOS 5.5 с последним изменением: 1995!). Имеется флаг "E" для файлов tar> 2 ГБ. Вот как это было сделано:

rsh sun_server tar cvEf - abc/file1 abc/file2 | rsh archive_server archive_cmd

Обратите внимание, что archive_server также является сервером UNIX и использует ту же версию команды tar.

При получении мы делаем так:

cd /destination_path/
rsh archive_server retrieve_cmd | tar xvf - 

Что случилось, файлы извлекаются в /abc/ (в родительском каталоге); не в /destination_path/abc/

Странно то, что мы изменили метод получения на gtar:

cd /destination_path/
rsh archive_server retrieve_cmd | gtar xvf - 

Для файлов размером более 2 ГБ в конце выдается много ошибок "плохой заголовок" и "исчерпана память".Однако для файлов размером менее 2 ГБ они обычно извлекаются в /destination_path/abc/!

Нам нужно извлечь файлы размером> 2 ГБ в /destination_path/abc/, потому что в / abc / есть много файлов с одинаковыми именами, и мы боимся, что извлеченные файлы перезапишут их..

Я тоже пробовал

rsh archive_server retrieve_cmd | tar xvf - /destination_path/

а также

cd /destination_path/
rsh archive_server retrieve_cmd | tar xvf - .

Но результат: нет результата! Это показывает, что извлечение завершено успешно, но ни один файл не извлечен ни в / abc /, ни в /destination_path/!

Есть ли способ извлечь эти файлы по желаемому пути назначения?

4 ответа

rsh быстрее, чем ssh, но я предпочитаю ssh. это должно работать, заменяя ssh на rsh.

gtar -cf - файлы | ssh user@host "(cd /destPath; gtar -xf -)"

Ключ здесь заключен в круглые скобки.

Вы должны использовать GNU tar (gtar) с обеих сторон. Tar Solaris будет молча испортить файлы>2 ГБ. Кроме того, он будет тихо испортить файлы с длинными именами файлов.

Можно подумать, что вы можете использовать команду split, чтобы разбить архив tar на несколько частей... Например, рассмотрим что-то вроде:

tar cf - <dirspec> | split --bytes=1GB  <destdir>/archive.

Назначением может быть смонтированная файловая система NFS. Или вы можете затем отправить их из локального источника с множеством одновременных команд удаленного копирования, если вы захотите потом.

Тогда вы можете распечатать вещь в любое время в месте назначения, используя:

cd <destdir>
cat archive.* | tar xf -

В сети у меня была бы небольшая проблема с передачей непрерывного потока байтов так долго в зависимости от расстояния. Меньшая передача сегмента, вероятно, предпочтительнее в любом случае, чтобы легче было восстанавливаться после сетевых сбоев.

Чтобы сделать вещи меньше, вы можете добавить в смесь gzip/gunzip в зависимости от того, сколько процессорного времени вы можете себе позволить.

Некоторые из приведенных выше ответов будут работать, однако, проверьте pax. он должен был заменить tar и cpio и более элегантно справиться с этой задачей. большинство людей не приняли этот инструмент из-за его широкой распространенности, но на самом деле он довольно хорош.

cptfrl

Другие вопросы по тегам