Apa pilihan terbaik untuk digunakan saat mengompresi file menggunakan 7 Zip?

62

Saya sering harus mengumpulkan file log dan mengunggahnya ke server pusat (Dimiliki oleh perusahaan lain). Server pusat memiliki batas ukuran file, jadi saya mencoba membuat file sekecil mungkin yang masih dalam format zip.

Apa pengaturan terbaik untuk digunakan ketika mengompresi file teks ke format zip ketika saya hanya perlu ukuran file yang kecil?

Pilihan 7zip

Saya telah melakukan kompresi ultra yang jelas dan dipilih, dan saya telah memperhatikan bahwa LZMA melakukan pekerjaan yang lebih baik daripada mengempis, tetapi ada terlalu banyak permutasi pilihan lain bagi saya untuk menguji semuanya.

jjnguy
sumber
1
Apakah memisahkan zip ke beberapa file merupakan opsi?
JaredMcAteer
3
Segera setelah Anda memilih apa pun selain Deflateformat, itu bukan file .zip "normal" lagi, melainkan file zip "extended", yang dipelopori oleh WinZip. Mereka awalnya menyimpan ekstensi sebagai .zip, untuk banyak kekhawatiran (karena kebanyakan alat penanganan zip yang normal tidak dapat mengatasinya), tetapi sebagian besar pengarsipan menggunakan .zipx sekarang untuk membedakannya dari file .zip tradisional. Jika Anda dapat menggunakan LZMA, alihkan ke .7z dan pilih PPMd - itu akan memampatkan lebih baik (dan lebih cepat!) Untuk file teks.
Afrazier
1
@afrazier: "Spesifikasi Format File .ZIP mendokumentasikan metode kompresi berikut: disimpan (tanpa kompresi), menyusut, Mengurangi (metode 1-4), Imploded, Tokenizing, Deflated, Deflate64, bzip2, LZMA (EFS), WavPack, PPMd . " en.wikipedia.org/wiki/Zip_%28file_format%29#Compression_methods
endolith
1
@endolith: bzip2, lzma, wv, dan ppmd adalah tambahan yang sangat baru untuk format file. Bahkan tidak aman untuk mengasumsikan bahwa penerima Anda dapat menangani deflate64, apalagi yang lebih baru.
Afrazier
1
mendefinisikan "alat zip normal". Sebagian besar "alat zip normal" saat ini seperti 7z dan winrar dapat mengekstrak file 7z.
phuclv

Jawaban:

61

Untuk membuat file ZIP standar terkecil yang dapat dibuat oleh 7-Zip, coba:

7z a -mm=Deflate -mfb=258 -mpass=15 -r foo.zip C:\Path\To\Files\*

Sumber: Bagaimana saya bisa mencapai kompresi ZIP standar terbaik?

Kalau tidak, jika Anda tidak peduli dengan standar ZIP, gunakan pengaturan ultra berikut:

7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on archive.7z dir1

Yang mana:

-t7z   7z archive

-m0=lzma
       lzma method

-mx=9  level of compression = 9 (Ultra)

-mfb=64
       number of fast bytes for LZMA = 64
-md=32m
       dictionary size = 32 megabytes

-ms=on solid archive = on
kenorb
sumber
2
@Tek: Kenapa? Itu tidak bagus. Pertanyaannya adalah tentang menggunakan "format ZIP standar", jadi jawabannya tidak boleh menentukan LZMA. -ms = aktif untuk .7z, bukan file zip standar. -md terkait dengan BZip2, jadi saya tidak berharap itu mempengaruhi ZIP (atau bahkan LZMA). -mfb = 64 adalah nilai yang tidak dioptimalkan: -mfb = 258 membuat file zip lebih kecil. Dan jawaban ini bahkan tidak menyebutkan -mpass = 15 yang dapat mempengaruhi file zip. Ini adalah jawaban yang diformat dengan baik yang, sayangnya, salah dalam banyak hal.
TOOGAM
6
Saya akan menggunakan lzma2
Lance Badger
Jika Anda melihat FAQ 7-zip, ini menyatakan bahwa versi 7z yang lebih baru mungkin memiliki kinerja yang lebih buruk daripada versi yang lebih lama dalam beberapa keadaan. Baca FAQ untuk lebih detail, tetapi singkatnya gunakan 'qs' di bidang Parameter di GUI atau gunakan -mqs dalam versi baris perintah untuk menggunakan jenis lama dengan metode ekstensi file. 7-zip.org/faq.html .
drojf
13

Jika Anda dapat menggunakan format .7z dan bukan hanya .zip, saya hanya akan menggunakan PPMD dengan opsi berikut dan membiarkan yang lainnya diatur oleh Level Kompresi:

  • Format Arsip: 7z
  • Metode Kompresi: PPMD
  • Tingkat Kompresi: Ultra

Saya secara teratur mengompresi log server / teks (60MB +) menggunakan opsi ini dan biasanya keluar 1-2% dari ukuran aslinya.

Umber Ferrule
sumber
Untuk teks seperti file log, ppmd jelas merupakan cara yang harus dilakukan. Namun, pertanyaan itu menyebutkan bahwa ia perlu tetap dalam format zip, yang mungkin tidak berfungsi dengan PPMD.
Brian Minton
Baru saja mencoba zip dengan PPMD ​​dan Windows Explorer membuka kontennya tanpa keluhan di Windows 7
Umber Ferrule
3
Saya perhatikan itu juga. Ini membuka konten dengan baik. Namun, ketika saya benar-benar mencoba untuk melihat salah satu file di dalam file zip, gagal.
Brian Minton
2
Mengapa metode kompresi PPMD ​​unggul untuk file teks?
user598527
1
LZMA2 memberikan hasil yang lebih baik untuk file teks daripada PPMD.
T3rm1
7

Saya membandingkan untuk db.fdb 1,2 GB (1236598784 B) di server Ubuntu 14.04.03 dengan p7zip [64] 9.20 di VM:

1. 7z a -mx=9 1.7z db.fdb
2. 7z a -t7z -m0=lzma -mx=9 -mfb=64 -md=32m -ms=on 2.7z db.fdb
3. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on 3.7z db.fdb
4. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on -pass=15 4.7z db.fdb
5. 7z a -mx=9 -mmt=on 5.7z db.fdb
6. 7z a -t7z -m0=lzma -mx=9 -mfb=258 -md=32m -ms=on -mmt=on 6.7z db.fdb

dan dapatkan hasilnya:

1.7z 96 MB (100108731 B) with 6' 25"
2.7z 95 MB ( 99520375 B) with 5' 18"
3.7z 93 MB ( 97512311 B) with 9' 19"
4.7z 93 MB ( 97512345 B) with 9' 40"
5.7z 96 MB (100108731 B) with 5' 26"
6.7z 93 MB ( 97512311 B) with 9' 09"

Saya pikir metode kedua berfungsi dengan baik = (hampir) kompres terbaik dengan waktu terbaik. Tetapi untuk "tampilan" terbaik dan mudah diingat adalah metode pertama - dengan file kecil dan tidak ada titik kompres maks. Antara metode 2 dan 3 kita tidak mendapatkan 7z lebih kecil tetapi membayar hampir dua kali lebih banyak untuk kompresi. Siapa pun yang memutuskan dengan keputusannya sendiri.

SULIMa
sumber
7

Setelah banyak percobaan, menggali ke dalam dokumentasi 7zip yang terperinci, dan membaca beberapa kode sumber 7z mengenai parameter LZMA2 yang canggih, berikut adalah metode yang lebih baik di bawah ini. Ini mengurangi beberapa file tes dunia nyata 1GB lebih dari 2 hingga 4 kali lebih baik daripada solusi yang diterima sebelumnya diposting di sini atau bahkan di halaman manual 7z.

7z a -t7z -mx=9 -mfb=273 -ms -md=31 -myx=9 -mtm=- -mmt -mmtf -md=1536m -mmf=bt3 -mmc=10000 -mpb=0 -mlc=0 archive.7z inputfileordir

Kompresi LZMA2 diasumsikan di sini, tetapi Anda mungkin bisa mendapatkan kinerja yang lebih baik di 7zip dengan melewati opsi LZMA2 lanjutan seperti -m0=LZMA2:27, atau -m0=LZMA2:d25, atau berbagai parameter seperti

-m0=BCJ2 -m1=LZMA:d25 -m2=LZMA:d19 -m3=LZMA:d19 -mb0:1

Parameter seperti itu tampaknya tidak dihormati oleh versi 7z yang saya uji, tetapi Anda mungkin ingin menjelajahi lebih lanjut atau menambal kode 7z untuk menguraikannya dengan benar. Atau mungkin itu seharusnya berfungsi dan hanya rusak di build yang diuji.

91735472
sumber
wow, ini membuat perbedaan yang sangat besar. Untuk arsip saya, saya bereksperimen dengan banyak saran lain, termasuk jawaban lain di sini, dan hasil terbaik yang saya dapatkan adalah 99MB, vs 85MB menggunakan pengaturan ini.
user9399
0

Setel bidang "split ke volume, byte" ke ukuran file maksimum yang diizinkan server (dalam byte, saya pikir, meskipun sepertinya menerima singkatan umum seperti "KB" dan "MB"). Jika file zip melebihi ukuran itu, 7-zip akan membaginya menjadi beberapa file secara otomatis, seperti integrasi_serviceLog.zip.001 , integrasi_serviceLog.zip.002 , dll. (Kembali ketika, PK Zip menggunakan ini untuk span file zip melintasi beberapa floppy disks.) Anda perlu semua file hadir untuk unzip. Gunakan itu alih-alih mengkhawatirkan pengaturan kompresi terbaik mutlak untuk digunakan untuk set file tertentu, karena apa yang terbaik untuk satu file mungkin berbeda untuk file lain, dan Anda tidak ingin harus melalui ini setiap kali Anda perlu salin log.

Rob Kennedy
sumber
1
Saya khawatir tentang bagaimana orang-orang di sisi lain akan membuka kompres file. Saya perlu sesederhana mungkin bagi mereka. Apakah Anda tahu jika Anda bisa unzip volume split menggunakan zip windows bawaan, atau gzip?
jjnguy
Tampaknya, tidak, fitur folder zip Windows bawaan tidak melakukan file zip yang direntang. Itu terlalu buruk, karena ini sudah menjadi fitur standar format sejak sebelum Windows 3. Saya akan sangat terkejut jika gzip tidak bisa melakukannya. WinZip pasti bisa.
Rob Kennedy