Pertanyaan ini sudah ada jawabannya di sini:
Cara saya memahami penggunaan tar + gzip adalah yang tar
biasanya digunakan untuk mengkonsolidasikan pengelompokan file menjadi satu file, kemudian gzip
digunakan untuk kompres file itu.
Baru-baru ini saya belajar bahwa tar
juga dapat mengompres.
Karena saya tidak sepenuhnya mengerti bagaimana kompresi bekerja pada inti, saya punya (mungkin konyol) kekhawatiran bahwa mengirim .tar pra-kompresi ke gzip dapat mencegah gzip dari kompresi juga karena potensi yang memungkinkan dan hal-hal semacam itu.
Pertanyaan saya pada dasarnya: Kombinasi apa dari metode args / kompresi yang harus saya gunakan untuk membuat tar.gz terkecil absolut, dan seperti apa pernyataan baris perintah untuk itu?
command-line
compression
gzip
tar
Mario Zigliotto
sumber
sumber
Jawaban:
Atau, Anda dapat memberi tahu tar untuk kompresi maksimum pengguna dengan cara ini:
Selain itu, untuk menjaga agarvvvars Anda tidak berantakan, Anda dapat melakukan ini:
sumber
Seperti yang Anda nyatakan- " tar juga dapat mengompresi ", menyiratkan bahwa -
tar
tidak selalu memampatkan data dengan sendirinya.Ia melakukannya hanya ketika digunakan dengan
z
opsi. Itu juga tidak dengan sendirinya, tetapi - dengan melewatkan data tar melalui gzip.Namun sebagai gantinya, seperti disebutkan dalam jawaban ini , Anda dapat menyalurkan dua perintah:
tar
&gzip
sedemikian rupa sehingga Anda dapat secara eksplisit menentukan tingkat kompresi untukgzip
perintah untuk mencapai ukuran keluaran terkecil.Di sini
9
menentukan tingkat kompresi maksimum yang mungkin.sumber
tar -cvf /path
Biasanya gzip atau tar tidak dapat membuat "tar.gz terkecil absolut". Ada banyak utilitas kompresi yang dapat memampatkan ke format gz. Saya telah menulis skrip bash " gz99 " untuk mencoba
gzip
,7z
danadvdef
untuk mendapatkan file terkecil. Untuk menggunakan ini untuk membuat menjalankan file sekecil mungkin:The
advdef
utilitas dari AdvanceCOMP biasanya memberikan file terkecil, tapi juga kereta (dengangz99
cek utilitas yang belum rusak file sebelum menerima output dariadvdef
). Untuk menggunakanadvdef
secara langsung, buat file.tar.gz namun Anda suka. Lalu lari:Ini akan membuat file gz standar yang dapat dibaca oleh gzip dan tar seperti biasa, hanya sedikit lebih kecil. Ini tentang hal terbaik yang dapat Anda lakukan dengan format gz.
Karena Anda baru saja mengetahui bahwa tar dapat mengompres, dan tidak mengatakan mengapa Anda menginginkan file ".tar.gz" terkecil, Anda mungkin tidak menyadari bahwa ada format yang lebih efisien yang dapat digunakan dengan file tar, seperti xz. Secara umum, beralih ke format yang berbeda dapat memberikan peningkatan kompresi yang jauh lebih baik daripada memutar-mutar opsi gzip. Kerugian utama xz adalah bahwa hal itu tidak biasa seperti gzip sehingga orang yang Anda kirimi file mungkin harus menginstal paket baru. Ini juga cenderung sedikit lebih lambat, terutama saat mengompresi. Jika ini tidak masalah bagi Anda, dan Anda benar-benar menginginkan file tar terkecil, coba:
Versi tar modern, misalnya di Ubuntu 13.10, secara otomatis mendeteksi file terkompresi. Jadi, bahkan jika Anda menggunakan kompresi xz Anda masih dapat mendekompres seperti biasa:
Untuk memberikan gambaran singkat bagaimana perbandingan utilitas kompresi ini, pertimbangkan efek kompresi patch-3.1.1 dari kernel linux:
Dalam contoh sepele ini, kita melihat bahwa untuk mendapatkan gz terkecil kita perlu advdef (meskipun 7z -tgzip hampir sama bagusnya dan jauh lebih sedikit buggy). Kita juga melihat bahwa beralih ke xz memberi kita lebih banyak ruang daripada mencoba memeras sebagian besar format gz lama, tanpa kompresi yang terlalu lama.
sumber
xz -9
biasanya membutuhkan waktu 5xgz -9
waktu, bukan hanya 1,5x meja Anda menyarankan.gzip
opsi--best
(setara dengan-9
) meminta tingkat kompresi tertinggi.sumber
--best
flag: -9 membingungkan pembaca.