
Ich muss komprimierte Dateiarchive erstellen und in der Lage sein, schnell einzelne Dateien/Verzeichnisse daraus zu extrahieren.
Das Problem ist beispielsweise, dass tar.bz2 für eine solche Aufgabe nicht die beste Wahl zu sein scheint – das Extrahieren einer einzelnen 4-KB-Datei aus einem 200-MB-Archiv (50.000 Dateien) dauert auf meinem Computer 17 Sekunden.
Gibt es ein Archivformat, das einen schnellen Export einzelner Dateien aus dem Archiv ermöglicht (und unter Linux funktioniert)?
Antwort1
pixzist eine parallele, indizierende Version von xz.
# Compress:
tar -I pixz -cf foo.tar.xz ./foo
# Decompress:
tar -I pixz -xf foo.tar.xz
# Very quickly list the contents of the compressed tarball:
pixz -l foo.tar.xz
# Very quickly extract a single file:
pixz -x dir/file < foo.tar.xz | tar x
Antwort2
Das Zip-Format komprimiert jede Datei einzeln und kombiniert sie dann (mit einem Verzeichnis der Archivinhalte) zu einer einzigen Archivdatei.
Antwort3
Neben dem bereits erwähnten Zip-Format können die Dienstprogramme dar
und dump
auch gut damit umgehen und behalten im Gegensatz zu Zip die Unix-Berechtigungen bei. dar
Sie sollten die Option Solid Archive vermeiden, da diese auf die Tar/Gzip-Methode zurückgeht, bei der das Ganze auf einmal komprimiert wird. Dies führt zu einer besseren Komprimierung, aber das Extrahieren einzelner Dateien dauert länger, da die gesamte Datei dekomprimiert werden muss, bis die gewünschte Datei gefunden wird. dump
kann große Mengen kleinerer Dateien (Zehntausende) recht gut verarbeiten und kann Multithread-Komprimierung durchführen, liest aber nur ext[234]-Dateisysteme.
Antwort4
.tar.gz
hat eine schnellere Dekomprimierungsgeschwindigkeit, aber der Kompromiss ist die schlechteste Komprimierungsgröße. Bearbeiten: Ignacio Vazquez-Abrams hat mich überwältigt.