Jawaban:
GZIP=-9 tar cvzf file.tar.gz /path/to/directory
dengan asumsi Anda menggunakan bash. Secara umum, atur variabel lingkungan GZIP ke "-9", dan jalankan tar secara normal.
Juga - jika Anda benar-benar menginginkan kompresi terbaik, jangan gunakan gzip. Gunakan lzma atau 7z.
Dan ketika menggunakan gzip (yang merupakan ide bagus karena berbagai alasan pula) pertimbangkan untuk menggunakan pigzprogram dan bukan gzip.
GZIP_OPT, penggunaannya harus sama.
Alih-alih menggunakan flag gzip untuk tar, gzip file secara manual setelah proses tar, maka Anda dapat menentukan tingkat kompresi untuk program gzip:
tar -cvf files.tar /path/to/file0 /path/to/file1 ; gzip -9 files.tar
Atau Anda bisa menggunakan:
tar cvf - /path/to/file0 /path/to/file1 | gzip -9 - > files.tar.gz
-9 pada baris perintah gzip memberitahu gzip untuk menggunakan tingkat kompresi maksimum yang dimungkinkan (standarnya adalah -6).
Sunting: Memperbaiki baris perintah pipa berdasarkan komentar @depesz.
file.tar, karena gzipmenambahkan ekstensi ".gz".
f -? jika tidak ada file, maka itu stdin / out
Versi tar modern mendukung format arsip xz (GNU tar, sejak 1.22 pada 2009, Busybox sejak 1.17.0 pada 2010).
Ini didasarkan pada lzma2 , seperti versi 7-Zip dari gz . Ini memberikan kompresi yang lebih baik jika Anda baik-baik saja dengan persyaratan membutuhkan dukungan xz.
tar -Jcvf file.tar.xz /path/to/directory
Saya baru saja menemukan di sini (pada dasarnya dupe dari pertanyaan ini, tetapi di Unix stackexchange) bahwa ada juga variabel lingkungan XZ_OPT = -9 untuk mengontrol tingkat kompresi XZ mirip dengan yang GZIP di pos lainnya.
XZ_OPT=-9 tar -Jcvf file.tar.xz /path/to/directory
tar cv /path/to/directory | gzip --best > file.tar.gz
Ini adalah solusi kedua Matrix Mole, tetapi sedikit dipersingkat:
Saat memanggil tar, opsi fmenyatakan bahwa output adalah file. Mengaturnya ke -(stdout) membuat tar menulis outputnya ke stdout yang merupakan perilaku default tanpa keduanya fdan -.
Dan seperti yang dinyatakan oleh gziphalaman manual, jika tidak ada file yang ditentukan gzip akan dikompres dari input standar. Tidak perlu untuk -di gzippanggilan.
Opsi --best(setara dengan -9) menetapkan tingkat kompresi tertinggi.
xzdan pixzjuga. Ini adalah cara yang bagus untuk mengontrol jumlah utas yang digunakan untuk kompresi paralel tanpa harus membuat file .tar perantara. Seperti begitutar -cv /path/to/dir | pixz -p4 > output.tpxz
Ada juga opsi untuk menentukan program kompresi menggunakan -I. Ini dapat mencakup opsi tingkat kompresi.
tar -I 'gzip -9' -cvf file.tar.gz /path/to/directory
-I, mereka akan mencoba memperlakukan semuanya sebagai nama program untuk exec, dan karenanya gagal. Setidaknya pada tar 1,29 di Debian Stretch, ini berfungsi.
topdan melihatnya menggunakan CPU mana saja antara 200% -400 $.