Wie kann man einen großen Ordner in kleine Dateien komprimieren, die auf 20 MB begrenzt sind?

10

Ich suche nach einer Möglichkeit, einen großen Ordner in viele 20-MB-Dateien zu komprimieren. Ich möchte nicht, dass die Zip-Datei in kleinere aufgeteilt wird. Stattdessen möchte ich einige Unterdateien / Ordner in Gruppen gruppieren, die beim Komprimieren 20 MB groß sind.

Wenn Sie wissen, wie das geht, helfen Sie bitte!

Aktualisieren

Ich muss nur die kleineren komprimierten Dateien verwenden, die alleine entpackt werden können.

Ich beabsichtige, mit virustotal.com einen großen Ordner zu scannen.

Nam G VU
quelle
Haben Sie Details zum verwendeten Betriebssystem?
Pitto
@ Pitto Ich benutze Windows-7
Nam G VU

Antworten:

10

In winzip: Fügen Sie die Dateien zur Zip-Datei hinzu, indem Sie entweder winzip starten und hinzufügen oder per Drag & Drop in winzip ziehen oder mit der rechten Maustaste auf die Dateien klicken und winzip 'zu zip hinzufügen ...'.

Dann in winzip:

Aktionen - Am unteren Rand von 'Teilegröße' teilen, 'Andere Größe' auswählen, dann 20 eingeben und mb auswählen

Erledigt!

Adolf Knoblauch
quelle
4
Auf der freien Seite zu bleiben, funktioniert auch 7zip perfekt :)
Pitto
3
Dadurch wird die Zip-Datei aufgeteilt, und wir können die geteilten Teile nicht alleine verwenden.
Nam G VU
Omg jetzt verstehe ich besser, wonach Sie suchen ... Ich kann einfach keine Lösung für Ihr Problem finden, dann :( Was ist mit der kostenlosen und wunderbaren Malwarebytes Antimalware, um die Dateien lokal zu scannen?
Pitto
6

Was Sie vorschlagen, ist im Wesentlichen eine Variation des Rucksackproblems , mit der zusätzlichen Wendung, dass Sie aufgrund der Dateikomprimierung nicht wissen, wie viel von Ihrem 20 MB "Rucksack" jedes Element belegen wird.

Die triviale Lösung wäre natürlich, einfach jede Datei einzeln zu komprimieren, aber das reduziert die Anzahl der Dateien nicht, so dass ich vermute, dass dies keine zufriedenstellende Lösung wäre.

Wenn ich mit diesem Problem konfrontiert würde, würde ich wahrscheinlich zunächst jede Datei einzeln an einen temporären Speicherort (oder im Speicher, ohne sie auf die Festplatte zu schreiben) komprimieren, damit ich für jede Datei eine ungefähre komprimierte Größe erhalten kann. Mit diesen Informationen wäre es dann möglich zu entscheiden, welche Dateien nach einem der Standardansätze für das Knapsack-Problem zusammengefasst werden sollen, und die tatsächlichen Zip-Dateien zu erstellen.

Angenommen, Sie haben eine Skriptsprache zur Verfügung und wissen, wie man sie verwendet, würde ich erwarten, dass dieser Ansatz ziemlich einfach zu automatisieren ist. Es manuell zu machen wäre ziemlich mühsam, wenn Sie mehr als eine Handvoll Dateien haben, mit denen Sie sich befassen müssen ...

Dave Sherohman
quelle
1
Kannst du nicht ohne Komprimierung zippen? Wenn man sich das "Update" der Operation ansieht, scheint das Dateiformat wichtiger zu sein als die Komprimierung.
Teuer
1
Heh ... Guter Punkt. Ich hatte die Verwendung von zip als einfaches Archiv ohne Komprimierung nicht in Betracht gezogen.
Dave Sherohman
@ DaveSherohman Wie können wir das dann machen?
Nam G VU
5

Es ist viel einfacher, zip die Aufteilung für Sie durchführen zu lassen, als es selbst herauszufinden. Wenn Ihr Ziel 20 MB Zip-Dateien sind, müssen Sie die komprimierte Größe jeder Datei schätzen, bevor Sie sie dem Archiv hinzufügen. Gibt es einen Grund, warum Sie nicht einfach zip die Aufteilung für Sie übernehmen lassen möchten? So würden Sie es mit gnu zip machen:

zip -s 20m -r myzip.zip mydir

Dadurch werden 20 MB komprimierte Dateien mit inkrementellen Indexnummern im Dateinamen erstellt.

SethG
quelle
4
Basierend auf dem Kommentar von OP zu einer anderen Antwort klingt es so, als ob er nicht möchte, dass Zip es automatisch aufteilt, weil Sie dann ein einziges Archiv erhalten, bei dem alle Dateien ordnungsgemäß funktionieren müssen, aber er möchte, dass jedes Stück ein vollständiges, verwendbares Archiv ist, unabhängig der anderen.
Dave Sherohman
4

Unter Linux gibt es ein Programm namens zipsplit , das genau dies tut. Es ist Teil des Standard-Zip-Pakets.

Es kann folgendermaßen ausgeführt werden:

zipsplit bigfile.zip -n 20000000

um bigfile.zip in Teile von max. 20 MB aufzuteilen. Beachten Sie auch, dass einzelne enthaltene Dateien nicht aufgeteilt werden. Somit kann jedes Teil einzeln entpackt werden. Dies bedeutet auch, dass die Aufteilung nicht möglich ist, wenn eine einzelne Datei nicht in die maximale Teilegröße passt.

Update: Es scheint, dass es unter info-zip.org auch Binärdateien für Windows gibt, insbesondere in ftp://ftp.info-zip.org/pub/infozip/win32/zip300xn-x64.zip für Win 64.

Zitrax
quelle
3

Ich fürchte, keine leichte Aussicht.

Ich habe kürzlich ein Skript geschrieben, um Dateien in Unterverzeichnissen zu sammeln, die nicht größer als 4,3 GB sind, um sie einfach auf DVD zu speichern, aber das war alles unkomprimiert.

Mit Komprimierung - jetzt gibt es die Herausforderung. Sie können die Größe der Dateien nach der Komprimierung nicht vorhersagen. Sie können lediglich weitere Dateien in absteigender Reihenfolge zur Größe hinzufügen, bis sie 20 MB überschreiten, und dann die letzte Datei entfernen, die durch eine kleinere ersetzt wird, bis sie unter 20 MB fällt . Wenn Sie alle Dateien erschöpft haben und sie immer noch> 20 MB groß sind, legen Sie einfach die letzte Datei ab und fahren Sie mit der nächsten Zip-Datei fort.

Ziemlich kniffliges Scripting und ein ziemlich langsamer, schmerzhafter Prozess.

Majenko
quelle
Hier mein Gedanke. Warum gruppieren Sie Dateien / Ordner nicht einfach in einer entpackten Gruppe von <= 20 MB und komprimieren sie dann? Die ZIP-Ergebnisdateien müssen nicht jeweils genau 20 MB groß sein.
Nam G VU
Möglich - nicht sicher, wie Sie das in Windows mit Skripten machen würden - Ich habe Perl zuvor unter Linux verwendet.
Majenko
2

Ich weiß, dass dies ein alter Thread ist, aber ich habe dies nur mit 7-Zip gemacht .

Sie müssen die Option "Auf Volumen teilen" verwenden:

Geben Sie hier die Bildbeschreibung ein

Kevin Kuszyk
quelle
Cool. Ich werde es später mit dir versuchen.
Nam G VU
1
Funktioniert in diesem speziellen Szenario nicht, da die kleineren komprimierten Dateien nicht alleine entpackt werden können. Sie müssen zusammengehalten werden.
Browly
2

Dave schien die am besten programmierbare Lösung für das zu bieten , was OP verlangte. Ich habe herausgefunden, dass dies auch manuell erfolgen kann , wenn die folgenden Annahmen getroffen werden (dies ist kein rein technisches Problem - es ist eher ein organisatorisches als ein technisches Problem):

  1. Da das OP erfordert, dass jede Zip-Datei in der Lage sein muss, ihren gesamten Inhalt unabhängig zu extrahieren , müssen Dateien, die nach dem Zippen 20 MB überschreiten, auf eine der folgenden Arten behandelt werden:
    • sie sind nicht zu berücksichtigen und müssen daher getrennt werden;
    • Sie müssen, wie in anderen Antworten vorgeschlagen ( winzip , 7-zip ), in 20-MB-Volumes aufgeteilt werden , und die resultierenden Dateien können nicht unabhängig voneinander verwendet werden (was diese erste Annahme verletzt ).
  2. Die komprimierten Dateien müssen nicht unbedingt genau 20 MB groß sein.
  3. Wenn es wichtiger ist, mehrere Zip-Dateien mit einer ungefähren Größe von 20 MB zu haben, kann das Zippen ohne Komprimierung durchgeführt werden.

Durch die Verwendung dieser Methode mit 7-zip (Windows-Oberfläche und -Terminal) habe ich die Komprimierung in den neu generierten Zip-Dateien beibehalten.

Beginnen Sie, indem Sie alle Dateien in eine einzelne Zip-Datei in einem leeren Ordner (mit der gewünschten Komprimierungsmethode) komprimieren, z. B. ALL.zipund öffnen Sie sie:

  1. Ordnen Sie die Liste der Dateien und Ordner, indem Sie auf die Spalte Größe oder Packgröße (komprimiert) klicken.
  2. Beginnen Sie mit den kleinsten Größen und wählen Sie Dateien / Ordner aus, die Sie in einer Zip-Datei gruppieren möchten.
  3. TestDrücken Sie die Taste, um die Gesamtgröße zu bestätigen (dies berücksichtigt die Komprimierung): Testfunktion
  4. Drücken Sie die Extractoder CopyTaste , während das Hinzufügen zum Ende des Extraktionspfad einen neuen Ordner Namen (zB: plu_8MB)
  5. Innerhalb ALL.zipzip, löschen Sie diese Dateien einfach extrahiert (Vermeidung von falsch wieder Extraktionen) und wechseln Sie in den nächsten Ordner oder Teilmenge von Dateien;
  6. Wiederholen Sie einen der folgenden Schritte :
    • Schritte 1 bis 5, wenn Sie eine unabhängige Zip-Datei erstellen möchten;
    • Schritte 1 bis 3 und verwenden Sie denselben Ordnernamen erneut (Schritt 4), bis ihre Gesamtgröße ungefähr 20 MB beträgt.
  7. Wenn Sie den gesamten Inhalt von ALL.zipin unabhängige Ordner extrahiert haben , löschen Sie diese Zip-Datei und öffnen Sie das Terminal in diesem Ordner .
  8. Art:

    for /F %i in ('dir /b') do "C:\Program Files\7-zip\7z.exe" a -tzip %i.zip %i
    

    Drücken Sie ENTERund dies generiert eine Zip-Datei für jeden Ordner, den Sie gerade extrahiert haben.

CPHPython
quelle
Für verschiedene Parameter in der Rekomprimierung finden Sie hier die Dokumentation zur 7zip-Syntax .
CPHPython