Как распаковать / распаковать вывод на лету

22

Что такое идиоматический способ сделать следующее

  • смола в стандартный вывод
  • прочитайте этот вывод tar из stdout и распакуйте его в другую папку.

Мое решение tar --to-stdout .. | tar -C somefolder -xvf -

Но может быть, есть более идиоматический способ сделать это.

shabunc
источник

Ответы:

28

Такой же -f - вариант работает на смолу также.

tar -cf - something | tar -C somefolder -xvf -

GNU tar по умолчанию использует stdio:

tar -c something | tar -C somefolder -xv

rsync также популярен.

rsync -av something/ somefolder/
grawity
источник
7

Просто добавив еще один вариант использования здесь. У меня была большая структура каталогов в системе, где почти не было места на диске, и я хотел получить файл tar.gz структуры каталогов на другом компьютере с большим количеством места.

tar -czf - big-dir | ssh user@host 'cat > /path/to/big-dir.tar.gz'

Это экономит нагрузку на сеть и означает, что вам не нужно использовать tar с другой стороны, если вы хотите вместо этого использовать rsync для передачи.

quickshiftin
источник
Netcat идеально подходит для этого. (Кошка с одного хоста на другой хост).
Hennes
2
@Hennes: из-за отсутствия аутентификации, проверки целостности, шифрования данных, а также необходимости вручную запускать его и то и другое стороны для каждой отдельной передачи (то есть 2 × работа), это звучит немного хуже, чем идеально
grawity
Большую часть времени я делаю gzip-файл перед сбросом по сети. Любые сбои интеграции могут проявляться как ошибки распаковки (хотя я никогда не получал их, когда использовал). Что касается запуска двух программ: Да, правда.
Hennes
1
Это может быть больше работы, но для отправки большого сжатого архива по ссылке во время чувствительной ко времени операции между машинами в защищенной локальной сети или по VPN, передача по каналу nc будет значительно быстрее, чем по SSH (по сети 1 Гбит, часто в 2 раза) Отправьте md5 сумму архива для проверки целостности.
Spooler
Круто, спасибо за совет @Spooler
quickshiftin