Найшвидший спосіб витягу tar.gz


42

Чи потрібно витягнути файл tar.gz швидше, ніж tar -zxvf filenamehere?

У нас великі файли та намагаємось оптимізувати роботу.


2
Ви $ tar -zxvfвиявляєте, що метод пов'язаний IO або CPU?
ЄЕАА

1
Повірте процесор, як я можу перевірити?
Джастін

5
Не пов’язані безпосередньо, але 'z' не потрібно з 2004 року / tar v1.1.5 gnu.org/software/tar/#TOCreleases :)
JamesHannah

Відповіді:


57

pigz - паралельна версія gzip. Хоча для декомпресії використовується лише один потік, він запускає 3 додаткові нитки для читання, запису та перевірки обчислення. Ваші результати можуть відрізнятися, але ми помітили значне поліпшення декомпресії деяких наших наборів даних. Після встановлення pigz файл смоли можна отримати:

pigz -dc target.tar.gz | tar xf -


11
+1. FWIW, ви також можете написати це як tar -xvf --use-compress-program=pigz filenamehere. ( -zдорівнює --use-compress-program=gzip.) Як варіант, ви навіть можете gzipбути символьним посиланням pigzі продовжувати використовувати -zxvf.
ruakh

2
@ruakh, мені довелося ставити -xfпісля --use-compress-program=pigz, або я отримав помилку. Чомусь це було не швидше, ніж використовувати gzipхоч.
веселість

Бо bzip2є pbzip2( pдля паралельних). tar --use-compress-program=pbzip2 -xvf file.tar.bz2.
alfC

Чи є спосіб використовувати pvкоманду, щоб показати прогрес, або еквівалент, використовуючи також --use-compress-program=pigzпрапор? Під час стиснення я можу це робити gnutar --use-compress-program="pigz | pv" -cf target.tar.gz YourData, але не знаю, як це зробити під час untar / стискування.
Стефан Ласєвський

13

якщо в кулі тар є багато багато маленьких файлів, скасуйте параметр 'v', спробуйте ще раз!


3
Я ніколи не використовую параметр -v. Не знаю, чому людям потрібно стільки шуму в консолі.
Еймантас

9
@Eimantas Коли ви знімете щось, що містить багато гігабайтних файлів, ви хочете певний показник прогресу. :)
Майкл Хемптон

@TimHughes: це дійсно чудово знати, будь ласка, опублікуйте як окрему відповідь!
smci

Майкл Хемптон, якщо у вас є багатогігабайтні файли, але змішані з великими списками невеликих файлів, у вас є вагомий привід не використовувати -v, в моїх локальних тестах це робить дзеркаль дуже повільним, особливо якщо у вас є дьоготь, що працює на віддаленому сервері Через термінал я хочу дивитись каталог du -s, щоб я міг спостерігати, як каталог зростає ...
Luciano Andress Martini

Можливо, варто використовувати --checkpoint=NUMBER( відображати повідомлення про хід кожного запису NUMBERth ) замість -v.
Стефан Ласєвський

6

Якщо ви хочете побачити прогрес, використовуйте щось на кшталт pv. Ось приклад:

pigz -dc mysql-binary-backup.tar.gz | pv | tar xf -
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.