Wie mache ich "Dateien ohne Komprimierung speichern" in 7-zip?

25

Gibt es eine Möglichkeit, selektiv zu verhindern , dass bestimmte Dateitypen in 7-zip komprimiert werden, wie in WinRAR?

Ich versuche, einen riesigen Ordner (viele Gigabyte) zu komprimieren, und ich möchte nicht, dass die bereits komprimierten Dateien (z. B. ZIP-Dateien) erneut komprimiert werden - sie sollten ohne Komprimierung gespeichert werden.

Mehrdad
quelle
Gibt es einen bestimmten Grund (Einsparung von Verarbeitungszeit, Lesen ohne Bündelung der 7z-Binärdatei oder Neuimplementierung von LZMA usw.), warum Sie dies tun möchten? Im Allgemeinen sind die meisten Komprimierungswerkzeuge, die ich verwendet habe, in der Regel intelligent genug, um nicht komprimierte Dateien automatisch zu speichern, wenn sie feststellen, dass eine Datei auf den Versuch, sie weiter zu komprimieren, schlecht reagiert.
ssokolow
@ssokolow: Es sind 4 Jahre vergangen und ich schätze, ich habe Ihre Frage nie beantwortet, aber es kann auch andere Gründe geben, z.
Mehrdad
Verbundene Frage: unix.stackexchange.com/questions/241898/…
bohdan_trotsenko

Antworten:

19

Ja, es ist möglich, verschiedene Komprimierungsmethoden für verschiedene Dateien im selben 7-Zip-Archiv zu verwenden.

Verwenden Sie die Befehlszeilenversion von 7-Zip mit dem -mParameter, um die Methode als anzugeben Copy, was bedeutet, dass keine Komprimierung erfolgt.

Beispiel

7za a -m0=Copy tmp7.7z *.txt

Weitere Informationen finden Sie unter Schalter -m (Komprimierungsmethode festlegen) .

Harrymc
quelle
Der obige Befehl komprimiert die TXT-Dateien nicht und fügt einem vorhandenen Archiv nur die TXT-Dateien hinzu. Vor dem Ausführen des obigen Befehls sollte eine Archivdatei mit den Nicht-TXT-Dateien erstellt werden. Nicht so einfach, wenn es n verschiedene Dateitypen gibt.
Praveen Sripati
Wenn -m0=Copynicht, versuchen Sie es -mx=0.
Bora M. Alper
15

Nehmen wir an, Sie haben ZIP-Dateien und Sie haben nicht komprimierte TXT-Dateien in Ihrem Ordner.

Der erste Schritt besteht darin, ein Archiv zu erstellen, in dem TXT-Dateien mit dem folgenden Befehl komprimiert werden.

Sie können -m zum Einstellen der Komprimierungsstufe verwenden. Dies hängt auch von der verwendeten Komprimierungsmethode ab

Nehmen wir an, dass es sich hier nur um die Standardkomprimierung handelt

7z a compressed.7z *.txt -r 

Sie werden jetzt komprimiert.7z bekommen.

Der zweite Schritt besteht darin, die bereits komprimierte Datei in dieses Archiv zu kopieren oder ein neues Archiv zu erstellen

7z u compressed.7z -u!update.7z -mx0 *.zip 

Es gibt weitere Ausarbeitung von Update - Befehl hier

Und falls Sie die grafische Benutzeroberfläche verwenden möchten, können Sie das Update auf folgende Weise durchführen

Bildbeschreibung hier eingeben

Manish Singh
quelle
Ein bisschen Ärger, aber ich denke, das würde funktionieren, danke.
Mehrdad
1

Ich habe ein PowerShell-Skript erstellt, mit dem ein Verzeichnis schnell komprimiert werden kann, indem bereits komprimierte Dateitypen (z. B. ZIP-Dateien) gespeichert werden, ohne dass versucht wird, sie erneut zu komprimieren. Es verwendet die Befehlszeilenschnittstelle von 7zip und Dateinamenerweiterungen, um zu entscheiden, ob eine bestimmte Datei komprimiert oder einfach gespeichert werden soll.

Sie finden das Skript hier: https://gist.github.com/ivanatpr/5dea086172eab573ba71

ivanatpr
quelle
0

Technisch gesehen werden komprimierte Dateien nicht weiter komprimiert, etwas über ein Entropie-Limit oder ähnliches. Ich vergesse die Details, aber das meiste, das Sie jemals bekommen würden, sind weniger als 2%, die ich gesehen habe.

Die meisten guten Komprimierungsprogramme überprüfen die Komprimierung und speichern einfach nicht komprimierbare Dateien, da die Komprimierung dann zusätzlichen Aufwand verursacht und die Größe erhöht.

Natürlich ist es an erster Stelle die Arbeit und Zeit, die Datei zu betrachten.

Wie in anderen Antworten erläutert, ist das Durchführen mehrerer Durchläufe über Ihre Dateigruppe wahrscheinlich die beste Lösung und lässt sich leicht mit Skripts versehen.

Erstellen Sie das 7z-Archiv und fügen Sie alles, ABER die komprimierten Dateien in einem Durchgang hinzu. Fügen Sie dann die vorkomprimierten Dateien als nicht komprimierte Daten an. (Ich würde es so machen, da sich das komprimierbare Material dann am Anfang des Archivs und das nicht komprimierbare am Ende befinden würde. Es würde schneller vom Laufwerk streamen, da es zusammenhängend ist.)

(verwendet zu viel "Komprimieren ..."!)

Lornix
quelle
1
Für den Fall, dass es jemandem hilft, hier ist der Kern von "etwas über eine Entropie-Grenze oder dergleichen". Die Entropie kann als Maß für die Unvorhersehbarkeit angesehen werden. Die Idee hinter der Komprimierung ist, dass Sie, wenn Sie ein Bitmuster vorhersagen können, nicht das ganze Ding speichern müssen ... nur kompaktere Anweisungen, wie man es vorhersagt (ein Codewort). Die theoretische maximale Entropie ist erreicht, wenn es ebenso wahrscheinlich ist, dass das nächste Codewort irgendetwas sein könnte. Das Komprimieren der komprimierten Daten wird verstärkt, wenn im zweiten Durchgang die Vorhersagbarkeit von Resten in der Ausgabe des ersten Durchgangs festgestellt wird.
ssokolow