Jadi saya perlu mengkompres direktori dengan kompresi maksimal.
Bagaimana saya bisa melakukannya xz
? Maksud saya, saya perlu tar
juga karena saya tidak dapat mengompres direktori dengan hanya xz
. Apakah ada oneliner untuk diproduksi misalnya foo.tar.xz
?
directory
tar
compression
LanceBaynes
sumber
sumber
man 1 xz
katait's not a good idea to blindly use -9 for everything like it often is with gzip(1) and bzip2(1).
-7 ... -9 [...] These are useful only when compressing files bigger than 8 MiB, 16 MiB, and 32 MiB, respectively.
RTFM untuk info lebih lanjut.Jawaban:
Dengan asumsi
xz
menghormati set standar flag commandline - termasuk flag level kompresi, Anda dapat mencoba:sumber
-9e
adalah level terbaik, tetapi itu akan memakan waktu sangat lama-9e
tidak akan selalu memberi Anda hasil terbaik - lihat poin 8 di sini rootusers.com/13-simple-xz-examples--threads=0
ke xzDengan GNU baru-baru ini
tar
di bash atau shell yang diturunkan:sakelar j huruf kecil tar menggunakan bzip, sakelar J huruf besar menggunakan xz.
The
XZ_OPT
variabel lingkungan memungkinkan Anda mengaturxz
opsi yang tidak dapat dilewatkan melalui memanggil aplikasi sepertitar
.Ini sekarang sudah maksimal .
Lihat
man xz
opsi lain yang dapat Anda atur (-e
/--extreme
mungkin memberi Anda beberapa manfaat kompresi tambahan untuk beberapa dataset).sumber
rc
danakanga
.fish
,csh
,tcsh
Danes
menjadi kerang besar yang tidak mendukungnya. Di sana, Anda akan menggunakanenv
perintah.-9
dan-e
xz opts, Anda inginkanXZ_OPT=-e9
tetapi seperti yang ditunjukkan @krzyk, -e sangat lambatXZ_OPT
bukan fitur yang diterapkan ditar
. Ini fitur darixz
. Ketikatar
panggilanxz
, variabel env hanya diteruskan.bahkan lebih baik daripada
sumber
option -e, --extreme
Ubah preset kompresi (-0 ... -9) sehingga rasio kompresi sedikit lebih baik dapat dicapai tanpa meningkatkan penggunaan memori kompresor atau dekompresor (pengecualian: penggunaan memori kompresor dapat meningkat sedikit dengan preset -0 ... -2). Kelemahannya adalah bahwa waktu kompresi akan meningkat secara dramatis (dapat dengan mudah berlipat ganda).-9
tidak-9e
, ya?XZ_OPT="-9e -T0" tar -cJf ...
Jika Anda memiliki 16 GiB RAM (dan tidak ada yang berjalan), Anda dapat mencoba:
Ini akan membutuhkan 1,5 GiB untuk dekompresi, dan sekitar 11xb untuk kompresi. Sesuaikan dengan itu untuk jumlah memori yang lebih sedikit.
Ini hanya akan membantu jika data sebenarnya yang besar, dan dalam hal apapun tidak akan membantu BAHWA banyak, tapi masih ...
Jika Anda mengompresi binari, tambahkan --x86 sebagai opsi xz pertama. Jika Anda bermain dengan file "multimedia" (audio atau bitmap yang tidak terkompresi), Anda dapat mencoba dengan --delta = dist = 2 (percobaan dengan nilai, nilai yang baik untuk dicoba adalah 1..4).
Jika Anda merasa sangat suka berpetualang, Anda bisa mencoba bermain dengan lebih banyak opsi LZMA
(ini adalah pengaturan default, Anda dapat mencoba nilai antara 0 dan 4, dan lc + lp tidak boleh melebihi 4)
Untuk melihat bagaimana preset default memetakan nilai-nilai ini, Anda dapat memeriksa file sumber src / liblzma / lzma / lzma_encoder_presets.c. Tidak ada yang menarik di sana (-e menetapkan panjang yang bagus untuk 273 dan juga menyesuaikan kedalaman).
sumber
Anda dapat mencoba berbagai opsi, karena saya -4e berfungsi lebih baik
Saya diuji dengan menjalankan:
Jadi, tampaknya opsi -4e bekerja sedikit lebih baik daripada -9e.
sumber
no difference = 660 4e better than 9e = 74 9e better than 4e = 17 total files = 751 tar 2 html 2 csv 2 xml 2 gz 2 ppt 2 eps 2 docx 2 gif 2 rpm 3 png 3 asv 3 xlsx 3 exe 3 rar 4 nc 4 txt 5 odt 6 xls 7 zip 7 doc 9 m 12 dat 17 other 109 pdf 133 135 jpg 270
txt 109 txt/pdf 135
tar
menggunakan filexz
.tar --help
:-I, --use-compress-program=PROG
juga kompres dengan kompresor eksternal:
dekompresi kompresor eksternal:
daftar arsip kompresor eksternal:
sumber
-I
ditambahkan.tar
perintah menggunakanJ
flag untuk file xz. Sebuah contoh:tar -cJvf foo.tar.xz foo/
sumber
J
sudah disebutkan dalam jawaban bdowningBagi mereka yang tertarik,
-e9
adalah 0,4% lebih kecil, 20% lebih lambat pada kompresi, 3% lebih lambat untuk dekompresi, dibandingkan dengan-9
pada laptop biasa. Di sini waktunya berjalan pada struktur direktori kode sumber Python.Kompresi:
Dekompresi:
Ukuran file:
sumber
Ini bukan jawaban yang tepat untuk pertanyaan Anda, tetapi Anda bisa menggunakan satu perintah, bukan dua:
menambahkan semua file dari direktori "dir1" ke arsip archive.7z menggunakan "ultras ettings"
format lain yang didukung adalah: zip, gzip, bzip2 atau tar. untuk ini ganti saja
7z
setelahnya-t
.--sumber
man 7z
CATATAN: jangan gunakan perintah ini untuk membuat cadangan file sistem Anda kecuali file pribadi karena format 7z tidak menyimpan izin sistem file .
sumber
Di mesin multicore dari versi v5.2.0 dari xz-utils, periksa:
Jika Anda ingin menggunakan jumlah core dan kompresi maksimum:
Atau atur -T ke jumlah core yang ingin Anda gunakan.
Kemudian:
Ini juga berguna untuk memilih tingkat kompresi:
https://catchchallenger.first-world.info/wiki/Quick_Benchmark:_Gzip_vs_Bzip2_vs_LZMA_vs_XZ_vs_LZ4_vs_LZO
sumber
Jika Anda ingin ini diselesaikan lebih cepat, menggunakan beberapa utas, tetapi tanpa memperlambat sistem Anda saat Anda melakukan pekerjaan lain, coba tambahkan di
-Tn
mana n adalah berapa banyak utas yang ingin Anda gunakan, sertanice
untuk menurunkan kompresi untuk prioritas siaga.Model (untuk 4 utas):
Coba tonton
top
atauhtop
ketika Anda melakukan ini di direktori besar (beberapa GB). Mudah-mudahan Anda akan melihat beberapaxz
utas dengan nilai Nice 19 (prioritas terendah).Saya juga telah menanggalkan ini
-f -
sesederhana yang masuk akal, seperti: di jawaban lain sama sekali tidak diperlukan, karenatar
keluaran default adalah stdout.Anda dapat
nice
proses tar juga, tetapi saya tidak pernah merasa perlu, karenaxz
selalu bottleneck CPU untuk pipa.Catatan praktis, saya jarang menggunakan
xz -9
apa pun, bukan karena CPU atau waktu, tetapi karena tuntutan memori yang tinggi. Lihatlah https://catchchallenger.first-world.info/wiki/Quick_Benchmark:_Gzip_vs_Bzip2_vs_LZMA_vs_XZ_vs_LZ4_vs_LZO#Memory_requirements_on_compression . Thexz
kompresor, sepertibzip2
, tapi tidak sepertigzip
, menggunakan lebih banyak memori untuk faktor kompresi yang lebih tinggi. Masukkan itu bersama dengan yangxz
menggunakan memori jauh lebih banyak daripada kompresor lainnya, Anda dapat dengan mudah menggunakan memori lebih dari 600 MB. Dan jika Anda menggunakan-T
untuk mengaktifkan kompresi berulir, tuntutan memori naik lebih jauh. Hanya sesuatu yang perlu diperhatikan, seperti jika Anda menjalankan beberapa layanan kecil pada VM kecil dengan memori 1-2 GB, Anda dapat secara tidak sengaja menyebabkan dampak.sumber
Pada Mac OS X, pendekatan alternatif untuk meneruskan parameter dengan
tar
adalah dengan menggunakan--options=
flag. Sebagai contoh,sumber