Як тар / знімати вихід на льоту


27

Який ідіоматичний спосіб зробити наступне

  • дьоготь до стдуту
  • прочитати цей вихід тар з stdout та витягнути в якусь іншу папку.

Моє рішення таке tar --to-stdout .. | tar -C somefolder -xvf -

Але, можливо, існує ідіоматичніший спосіб зробити це.

Відповіді:


34

Цей же -f -варіант працює і для міркування.

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

GNU tar використовує stdio за замовчуванням:

tar -c something | tar -C somefolder -xv

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

rsync -av something/ somefolder/

9

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

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

Це економить накладні витрати в мережі і означає, що вам не доведеться націлювати на інший бік, якщо ви хочете використовувати rsync для передачі.


Netcat ідеально підходить для цього. (Кіт від одного господаря до іншого господаря).
— Геннес

3
@Hennes: З відсутністю автентифікації, перевірки цілісності, шифрування даних, а також з необхідністю вручну запускати її з обох сторін для кожної окремої передачі (тобто 2 × робота), це звучить трохи менше, ніж ідеально
— шанобливість

Більшу частину часу я gzip, перш ніж скинути його по мережі. Будь-які збої інтеграції, ймовірно, виявляться як декомпресійні помилки (хоча я ніколи не отримував жодних, коли використовував її). Щодо запуску двох програм: Aye, true.
— Геннес

3
Можливо, це буде більше роботи, але для надсилання великого стисненого архіву через посилання під час роботи, залежної від часу, між машинами в захищеній локальній мережі або через VPN, пропуск через nc буде значно швидшим, ніж SSH (через мережу 1Gb, часто коефіцієнтом 2). Надішліть понад md5 суму архіву для перевірки цілісності.
— Спулер
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.