Was sind die besten Optionen zum Komprimieren von Dateien mit 7 Zip?


62

Ich muss häufig Protokolldateien sammeln und auf einen zentralen Server hochladen (im Besitz einer anderen Firma). Der zentrale Server hat ein Größenlimit für die Datei, daher versuche ich, die kleinstmögliche Datei zu erstellen, die noch im zip-Format vorliegt.

Was ist die beste Einstellung zum Komprimieren einer Textdatei in ein Zip-Format, wenn ich nur eine kleine Dateigröße benötige?

7zip-Optionen

Ich habe die offensichtliche und gewählte Ultra-Komprimierung durchgeführt und festgestellt, dass LZMA einen besseren Job macht als die Luft abzulassen, aber es gibt viel zu viele andere Permutationen von Optionen, als dass ich sie alle testen könnte.


1
Ist die Aufteilung der ZIP-Datei in mehrere Dateien eine Option?
JaredMcAteer

3
Sobald Sie sich für etwas anderes als das DeflateFormat entscheiden, handelt es sich nicht mehr um eine "normale" ZIP-Datei, sondern um eine "erweiterte" ZIP-Datei, die von WinZip entwickelt wurde. Ursprünglich behielten sie die Erweiterung als .zip bei, was zu großer Beunruhigung führte (da die meisten normalen Zip-Handling-Tools nicht mit ihnen umgehen können), aber die meisten Archivierer verwenden jetzt .zipx, um sie von herkömmlichen .zip-Dateien zu unterscheiden. Wenn Sie LZMA verwenden können, wechseln Sie zu .7z und wählen Sie PPMd - es sollte für Textdateien besser (und schneller!) Komprimiert werden.
afrazier

1
@afrazier: "Die .ZIP-Dateiformatspezifikation dokumentiert die folgenden Komprimierungsmethoden: gespeichert (keine Komprimierung), verkleinert, verkleinert (Methoden 1-4), implodiert, Tokenisieren, entleert, entleert64, bzip2, LZMA (EFS), WavPack, PPMd . " en.wikipedia.org/wiki/Zip_%28file_format%29#Compression_methods
Endolith

1
@endolith: bzip2, lzma, wv und ppmd sind alles sehr neue Ergänzungen des Dateiformats. Es ist nicht einmal sicher anzunehmen, dass Ihr Empfänger mit deflate64 umgehen kann, geschweige denn mit etwas Neuerem.
afrazier

1
definiere "normale zip tools". Heutzutage können die meisten "normalen Zip-Tools" wie 7z und winrar 7z-Dateien extrahieren.
Phuclv

Antworten:


61

Versuchen Sie Folgendes, um die kleinste Standard-ZIP-Datei zu erstellen, die 7-Zip erstellen kann:

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

Quelle: Wie kann ich die beste Standard-ZIP-Komprimierung erzielen?

Andernfalls verwenden Sie die folgenden Ultra-Einstellungen, wenn Sie sich nicht für den ZIP-Standard interessieren:

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

Welche sind:

-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

2
@Tek: Warum? Es ist nicht gut. Bei der Frage ging es um die Verwendung des "Standard-ZIP-Formats", daher sollte in der Antwort nicht LZMA angegeben werden. -ms = on ist für .7z, keine Standard-Zip-Dateien. -md ist mit BZip2 verwandt, daher erwarte ich keine Auswirkungen auf ZIP (oder sogar LZMA). -mfb = 64 ist ein nicht optimierter Wert: -mfb = 258 erstellt kleinere ZIP-Dateien. Und diese Antwort erwähnt nicht einmal -mpass = 15, was sich auf ZIP-Dateien auswirken kann. Dies ist eine schön formatierte Antwort, die leider in mehrfacher Hinsicht falsch ist.
TOOGAM

6
Ich würde lzma2
Lance Badger

Wenn Sie sich die 7-zip-FAQ ansehen, heißt es, dass neuere Versionen von 7z unter bestimmten Umständen eine schlechtere Leistung als ältere Versionen aufweisen können. Weitere Informationen finden Sie in den häufig gestellten Fragen. Verwenden Sie jedoch in Kürze das Feld 'qs' in Parameters in der GUI oder -mqs in der Befehlszeilenversion, um die alte Methode zum Sortieren nach Dateierweiterung zu verwenden. 7-zip.org/faq.html .
15.

13

Wenn Sie das .7z-Format anstelle von .zip verwenden können, würde ich einfach PPMD mit den folgenden Optionen verwenden und alles andere wie in der Komprimierungsstufe festgelegt belassen:

  • Archivformat: 7z
  • Komprimierungsmethode: PPMD
  • Kompressionsstufe: Ultra

Ich komprimiere regelmäßig Server- / Textprotokolle (60 MB +) mit diesen Optionen und sie werden normalerweise mit 1-2% der Originalgröße ausgegeben .


Für Text wie Protokolldateien ist ppmd definitiv der richtige Weg. In der Frage wurde jedoch darauf hingewiesen, dass das Zip-Format beibehalten werden muss, was bei PPMD ​​möglicherweise nicht funktioniert.
Brian Minton

Habe gerade zip mit PPMD ​​ausprobiert und Windows Explorer öffnet den Inhalt ohne Beanstandung hier auf Windows 7
Umber Ferrule 20.12.13

3
Das ist mir auch aufgefallen. Es öffnet den Inhalt ganz gut. Als ich jedoch tatsächlich versuchte, eine der Dateien in der ZIP-Datei anzuzeigen, schlug dies fehl.
Brian Minton

2
Warum ist PPMD ​​die bessere Komprimierungsmethode für Textdateien?
user598527

1
LZMA2 liefert bessere Ergebnisse für Textdateien als PPMD.
T3rm1

7

Ich vergleiche für db.fdb 1,2 GB (1236598784 B) in Ubuntu Server 14.04.03 mit p7zip [64] 9.20 auf 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

und haben das Ergebnis:

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"

Ich denke, die zweite Methode funktioniert gut = (fast) beste Komprimierung mit der besten Zeit. Aber für die beste "Ansicht" und leicht zu merken ist die erste Methode - mit kleinen Dateien und ohne Punktmaximum komprimieren. Zwischen 2 und 3 bekommen wir keine kleineren 7z, zahlen aber fast zwei Mal mehr Zeit für die Komprimierung. Jeder entscheidet mit seinen eigenen.


7

Nach ausgiebigen Experimenten, Einarbeiten in die ausführliche 7zip-Dokumentation und Lesen eines Teils des 7z-Quellcodes in Bezug auf die erweiterten LZMA2-Parameter finden Sie nachfolgend eine bessere Methode. Einige reale Testdateien mit 1 GB wurden mehr als 2- bis 4-mal besser reduziert als die zuvor akzeptierten Lösungen, die hier oder sogar in der 7z-Manpage veröffentlicht wurden.

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

Die LZMA2-Komprimierung wird hier angenommen, aber Sie können möglicherweise eine noch bessere Leistung in 7zip erzielen, indem Sie erweiterte LZMA2-Optionen wie -m0=LZMA2:27oder -m0=LZMA2:d25oder eine Reihe von Parametern wie übergeben

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

Solche Parameter schienen von den von mir getesteten 7z-Versionen nicht beachtet zu werden, aber Sie möchten sie möglicherweise weiter untersuchen oder den 7z-Code patchen, um sie ordnungsgemäß zu analysieren. Oder vielleicht soll es funktionieren und ist nur in den getesteten Builds defekt.


Wow, das hat einen großen Unterschied gemacht. Für mein Archiv habe ich mit vielen anderen Vorschlägen experimentiert, einschließlich anderer Antworten, und das beste Ergebnis, das ich erzielt habe, war 99 MB gegenüber 85 MB mit diesen Einstellungen.
User9399

0

Stellen Sie das Feld "Auf Volume, Bytes aufteilen" auf die maximal zulässige Dateigröße des Servers ein (in Bytes, glaube ich, obwohl gängige Abkürzungen wie "KB" und "MB" akzeptiert werden). Wenn die ZIP-Datei diese Größe überschreitet, wird sie von 7-zip automatisch in mehrere Dateien aufgeteilt, z. B. integration_serviceLog.zip.001 , integration_serviceLog.zip.002 usw. (PK Zip hat dies vor langer Zeit verwendet, um ZIP-Dateien über mehrere Dateien zu verteilen Disketten.) Zum Entpacken müssen alle Dateien vorhanden sein. Verwenden Sie diese Option, anstatt sich um die absolut besten Komprimierungseinstellungen für einen bestimmten Satz von Dateien zu kümmern, da die besten Einstellungen für eine Datei für eine andere Datei unterschiedlich sein können und Sie dies nicht jedes Mal durchführen müssen möchten Protokolle kopieren.


1
Ich mache mir Sorgen darüber, wie die Leute auf der anderen Seite die Dateien dekomprimieren werden. Ich muss es ihnen so einfach wie möglich machen. Wissen Sie, ob Sie die aufgeteilten Volumes mit dem integrierten Windows-Zip oder gzip entpacken können?
jjnguy

Anscheinend funktioniert die integrierte Windows-Zip-Ordner-Funktion nicht mit überspannten Zip-Dateien. Das ist zu schade, da es bereits vor Windows 3 ein Standardfeature des Formats war. Ich wäre sehr überrascht, wenn gzip dies nicht könnte. WinZip kann definitiv.
Rob Kennedy
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.