Cara tercepat untuk mengekstrak tar.gz

42

Apakah ada cara mengekstrak file tar.gz lebih cepat daripada tar -zxvf filenamehere?

Kami memiliki file besar, dan mencoba mengoptimalkan operasi.

Justin
sumber
2
Apakah Anda menemukan bahwa $ tar -zxvfmetode ini terikat IO atau CPU?
EEAA
1
Percayalah pada CPU, bagaimana saya bisa memeriksanya?
Justin
5
Tidak terkait langsung, tetapi 'z' belum diperlukan sejak 2004 / tar v1.1.5 gnu.org/software/tar/#TOCreleases :)
JamesHannah

Jawaban:

57

pigz adalah versi paralel dari gzip. Meskipun hanya menggunakan utas tunggal untuk dekompresi, ia memulai 3 utas tambahan untuk membaca, menulis, dan memeriksa perhitungan. Hasil Anda mungkin bervariasi tetapi kami telah melihat peningkatan yang signifikan dalam dekompresi beberapa set data kami. Setelah Anda menginstal pigz, file tar dapat diekstraksi dengan:

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

TimS
sumber
11
+1. FWIW, Anda juga bisa menuliskannya sebagai tar -xvf --use-compress-program=pigz filenamehere. ( -zJumlah hingga --use-compress-program=gzip.) Atau, Anda bahkan gzipdapat menjadi symlink pigz, dan tetap menggunakan -zxvf.
ruakh
2
@ruakh, saya harus -xfmengejarnya --use-compress-program=pigz, atau saya mendapat kesalahan. Untuk beberapa alasan, itu tidak lebih cepat daripada menggunakan gzipsekalipun.
jonderry
Karena bzip2ada pbzip2( puntuk paralel). tar --use-compress-program=pbzip2 -xvf file.tar.bz2.
alfC
Apakah ada cara untuk menggunakan pvperintah untuk menunjukkan progres, atau equivilant, sementara juga menggunakan --use-compress-program=pigzflag? Selama kompresi, saya bisa melakukannya gnutar --use-compress-program="pigz | pv" -cf target.tar.gz YourData, tetapi tidak yakin bagaimana melakukan ini selama untar / uncompression.
Stefan Lasiewski
13

jika ada banyak banyak file kecil di bola tar, batalkan parameter 'v', coba lagi!

anonim
sumber
3
Saya tidak pernah menggunakan param -v. Tidak tahu mengapa orang membutuhkan banyak kebisingan di konsol.
Eimantas
9
@Eimantas Ketika Anda menghapus sesuatu yang berisi banyak file multi-gigabyte, Anda akan menginginkan beberapa indikasi kemajuan. :)
Michael Hampton
@TimHughes: itu benar-benar hebat untuk diketahui, silakan kirim sebagai jawaban terpisah!
smci
Michael Hampton jika Anda memiliki file multi-gigabyte tetapi dicampur dengan daftar besar file kecil Anda memiliki alasan yang baik untuk tidak menggunakan -v, dalam tes lokal saya itu membuat tar sangat lambat khususnya jika Anda memiliki tar yang berjalan di server jauh via terminal, apa yang saya lakukan adalah menonton direktori du -s sehingga saya bisa melihat direktori bertambah ...
Luciano Andress Martini
Mungkin layak digunakan --checkpoint=NUMBER( menampilkan pesan kemajuan setiap NUMBER catatan ) alih-alih -v.
Stefan Lasiewski
6

Jika Anda ingin melihat kemajuan, gunakan sesuatu seperti pv. Berikut ini sebuah Contoh:

pigz -dc mysql-binary-backup.tar.gz | pv | tar xf -
Tim Hughes
sumber