Was ist die schnellste Komprimierungsmethode für eine große Anzahl von Dateien?

14

Ich muss ein Verzeichnis mit ungefähr 350.000 ziemlich kleinen Dateien komprimieren, die insgesamt ungefähr 100 GB betragen. Ich verwende OSX und verwende derzeit das Standardtool "Komprimieren", mit dem dieses Verzeichnis in eine ZIP-Datei konvertiert wird. Gibt es einen schnelleren Weg, dies zu tun?

Spike
quelle
Sie können tar wahrscheinlich nicht schlagen, da es nicht wirklich komprimiert, sondern nur archiviert, ohne spezielle Optionen, die dies ermöglichen. Bei Antworten würde ich gerne Beweise sehen, keine Meinung ...
Daniel Beck
1
Hängt davon ab, wie viel Komprimierung gewünscht wird.
ta.speot.is
1
Am Ende habe ich Teer verwendet und aus Geschwindigkeitsgründen noch nicht versucht, ihn zu komprimieren. Es konnte pünktlich zu dem fertig werden, wofür ich es brauchte. Vielen Dank!
Spike
@DanielBeck, Problem mit tar ist, dass sie den Verzeichnisbaum nicht anzeigen. Um überhaupt eine "Ansicht" zu erhalten, müssen wir den ganzen Teer entpacken. Gibt es Alternativen zu tar, die die Verzeichnisansicht anzeigen?
Pacerier

Antworten:

14

Für Verzeichnisse würde ich ein tar weitergeleitet an bzip2 mit max-kompression.

ein einfacher weg zu gehen ist,

tar cfj archive.tar.bz2 dir-to-be-archived/ 

Dies funktioniert hervorragend, wenn Sie nicht beabsichtigen, kleine Dateigruppen aus dem Archiv abzurufen
und planen gerade, die ganze Sache zu extrahieren, wann immer / wo immer erforderlich.
Aber wenn Sie tun Ich möchte einen kleinen Satz von Dateien rausholen, es ist nicht so schlimm.

Ich nenne solche Archive lieber filename.tar.bz2 und extrahiere mit dem ' xfj ' Möglichkeit.

Das Max-Kompressionsrohr sieht so aus,

tar cf - dir-to-be-archived/ | bzip2 -9 - > archive.tar.bz2  
#      ^pipe tarball from here to zip-in^ into the archive file. 

Beachten Sie das ' bzip2 'Methode und mehr Komprimierung sind in der Regel langsamer als normal gzip von ' tar cfz '.

Wenn Sie ein schnelles Netzwerk haben und das Archiv auf einem anderen Computer abgelegt wird,
Sie können mit einer Pipe über das Netzwerk beschleunigen (effektiv mit zwei Computern zusammen).

tar cf - dir/ | ssh user@server "bzip2 -9 - > /target-path/archive.tar.bz2"  
#      ^ pipe tarball over network to zip ^ and archive on remote machine.

Einige Referenzen,

  1. Linux Journal: Komprimierungswerkzeuge im Vergleich , 28. Juli 2005
  2. gzip vs. bzip2 , 26. August 2003
  3. Ein kurzer Benchmark: Gzip vs. Bzip2 vs. LZMA , 31. Mai 2005
nik
quelle
1
Der Fragesteller fragte nach der schnellsten Methode, ein 100-GB-Teer würde ein Leben lang dauern! Ab und zu ist der Speicherplatz so günstig, dass es nur eine sinnlose Verschwendung von Ressourcen ist, wenn es nicht unbedingt erforderlich ist, Äonen in Anspruch zu nehmen, um die letztmögliche Redundanz zu erreichen. Da der Großteil der Festplattenbelegung im Slack Space verbraucht ist, reicht es wahrscheinlich aus, den Teer mit -1 zu zippen, um ein paar Monate früher mit der nächsten Aufgabe fortzufahren!
Andy Lee Robinson
Obwohl ich der Meinung bin, dass eine 100-GB-Datei wahrscheinlich keine vollständige Komprimierung wert ist, glaube ich nicht, dass bzip2 für 100 GB linear mehr Zeit benötigt als für 1 GB (etwa). Würde gerne eine Theorie oder Daten sehen, um beide Wege aufzuzeigen.
nik
Ich verstehe, dass das Wörterbuch von bzip2 anpassungsfähig ist, deshalb sucht es ständig nach neuen Redundanzen innerhalb seines Suchfensters bis zum Ende der Datei. Vorbehaltlich der Homogenität der Dateientropie sollte diese relativ linear sein. Es wäre ein schlechter Kompressor, der davon ausgeht, dass er von Anfang an alles Notwendige hat, um den Rest schnell zu komprimieren. In einigen Fällen ist dies jedoch möglicherweise alles, was benötigt wird, obwohl es bessere Möglichkeiten gibt, alt zu werden, als daran zu arbeiten empirisch mit 100GB Datensätzen raus!
Andy Lee Robinson
7

Diese Kerl habe ein paar Nachforschungen angestellt. Es scheint, dass .zip größere Dateien schneller komprimiert. Es ergibt jedoch eine der größten Kompressionsgrößen. Es sieht auch so aus, als ob er Windows-Dienstprogramme verwendet hätte, aber ich wette, dass das OSX-Dienstprogramm fast genauso optimiert ist.

Hier ist eine hervorragende Website, auf der zahlreiche Komprimierungsprogramme auf Geschwindigkeit für viele Dateien hin überprüft wurden. Auf dieser Website gibt es viele andere Tests, anhand derer Sie das für Sie beste Dienstprogramm ermitteln können.

Ein Großteil der Geschwindigkeit hängt mit dem von Ihnen verwendeten Programm zusammen. Ich habe das Dienstprogramm von 7zip für Windows verwendet und finde, dass es sehr schnell ist. Das Komprimieren vieler Dateien dauert jedoch sehr lange, egal was passiert. Ich würde es einfach über Nacht loslassen. Oder Sie könnten einfach das Ganze tarieren und es nicht komprimieren ... Ich persönlich hasse es, große Archive zu entpacken, also wäre ich vorsichtig, wenn Sie das möchten.

Dennis Hodapp
quelle
0

Ich benutze lieber

tar cf - dir-to-be-archived/ | bzip2 -9 - > archive.tar.bz2

um Dateien auf einen anderen Server zu verschieben und gleichzeitig zu konvertieren

oussama fahd
quelle
1
Welches ist bereits in der oberen Antwort von @nik vorgeschlagen. Du musst nicht duplizieren, sondern nur die andere Antwort positiv bewerten oder einen Kommentar hinzufügen, wenn du etwas Wesentliches hast, aber keine beteiligte Antwort geben möchtest. ;O)
pbhj