извлечь несколько членов из архива tar и передать по сети

9

редактировать: я хочу дополнительные member01и member02и каталогblah/

tarball_1.tar.gzсодержит каталог test/с 20 файлами. Я хочу извлечь только каталоги test/member01и test/member02и blah/и скопировать их в другой "remote_host", используя ssh / scp.

Можно ли это сделать как однострочник? Я подумал об использовании tar, paxили, cpioно я думаю, я еще не очень разбираюсь в этих утилитах.

Фелипе Альварес
источник

Ответы:

15
tar -xzOf file.tar.gz file_you_want_to_extract | ssh user@host 'cat > /path/to/destination_file'
  • -x : Экстракт
  • -z : Через gzip
  • -f : Взять в качестве входного файла.
  • -O : Извлечь в стандартный вывод

file_you_want_to_extractИзвлекается из file.tar.gzстандартной продукции, который поступает в ssh, который работает catна удаленном хосте и записывает его в стандарт на пульте дистанционного управления destination_file. Конечно, вы захотите убедиться, что у вас есть разрешение на запись в нужный файл назначения на удаленном хосте.

Атанамир
источник
Я не был понятен в своем первоначальном сообщении :) Мне нужно извлечь более одного участника, плюс каталог.
Фелипе Альварес
должен быть tar -xz0f: после fидет имя архива
Felipe Alvarez
1
Извлечение нескольких членов может привести к путанице, если вы хотите, чтобы они были однострочными, поскольку извлечение нескольких файлов в стандартный вывод не имеет смысла. Вероятно, вам придется tarдля каждого, который вы хотите извлечь, а затем использовать scp -r member1 member2 blah user@host:/destination/folder/для их копирования. Если вы действительно хотите сделать его однострочным, вы можете объединить все эти команды с помощью &&. Более практичный вариант - просто создать сценарий, который повторяет параметры командной строки и выполняет tarдля каждого из них, а затем scpвыводит все из них в конце.
Атанамир
аааа, понятно Так что нет «простого» однострочного метода. Спасибо :-)
Фелипе Альварес
2
В качестве альтернативы, если «одна строка» важнее, чем «сколько времени это займет», вы можете передать весь архив через ssh и извлечь нужные элементы с другой стороны »cat file.tar.gz | ssh user @ host ' tar zxvf file1 file2 dir1 '
Колин