У нас есть несколько файлов размером более 2 ГБ, тарированных с использованием команды tar в версии UNIX (SunOS 5.5 с последним изменением: 1995!). Для файлов tar размером более 2 ГБ установлен флаг "E". Вот как это было сделано:
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 ГБ обычно извлекаются в / путь_назначения / 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 /!
Есть ли способ извлечь эти файлы по желаемому пути назначения ..?
rsh быстрее, чем ssh, но я предпочитаю ssh. это должно сработать, заменив ssh на rsh.
gtar -cf - файлы | ssh user @ host "(cd / destPath; gtar -xf -)"
Ключ здесь заключен в круглые скобки.
некоторые из приведенных выше ответов будут работать, однако проверьте pax. он должен был заменить tar и cpio и сделать работу более элегантной. большинство людей не приняли этот инструмент из-за его широкой популярности, но на самом деле он довольно хорош.
cptfrl
Вам нужно использовать tar (gtar) GNU с обеих сторон. Tar Solaris незаметно испортит файлы размером> 2 ГБ. Кроме того, он незаметно испортит файлы с длинными именами.
Мысль, вы могли бы использовать команду split, чтобы разбить tar-архив на несколько частей .... Например, рассмотрим что-то вроде:
tar cf - <dirspec> | split --bytes=1GB <destdir>/archive.
Местом назначения может быть смонтированная файловая система NFS. Или вы могли бы затем отправить их из локального источника с множеством команд удаленного копирования, выполняемых одновременно, если хотите, впоследствии.
Затем вы можете в любой момент распаковать вещь в месте назначения, используя:
cd <destdir>
cat archive.* | tar xf -
В сети я бы немного обеспокоился передачей непрерывного потока байтов такой длины в зависимости от расстояния. В любом случае, передача меньшего сегмента, вероятно, предпочтительнее для более легкого восстановления после сбоев сети.
Чтобы уменьшить размер, вы можете добавить в смесь gzip / gunzip, в зависимости от того, сколько процессорного времени вы можете себе позволить.