Leider, um einzelnes Mitglied von .tar.gz
zu entpacken Archiv müssen Sie das gesamte Archiv verarbeiten, und Sie können nicht viel tun, um es zu reparieren.
Hier ist .zip
(und einige andere Formate wie .rar
)-Archive funktionieren viel besser, weil zip
format hat ein zentrales Verzeichnis aller darin enthaltenen Dateien mit direkten Offsets, die auf die Mitte des zip
zeigen Datei, sodass Archivmitglieder schnell extrahiert werden können, ohne das Ganze zu verarbeiten.
Sie fragen sich vielleicht, warum .tar.gz
verarbeitet wird ist so langsam?
.tar.gz
(oft abgekürzt als .tgz
) ist einfach .tar
Archiv komprimiert mit gzip
Kompressor. gzip
ist ein Streaming-Kompressor, der nur mit einer Datei arbeiten kann. Wenn Sie einen Teil von gzip
erhalten möchten streamen, müssen Sie ihn als Ganzes dekomprimieren, und das bringt ihn für .tar.gz
wirklich um (und für .tar.bz2
, .tar.xz
und andere ähnliche Formate basierend auf .tar
).
.tar
Format ist eigentlich sehr, sehr einfach. Es ist einfach ein Strom von 512-Byte-Datei- oder Verzeichnis-Headern (Name, Größe usw.), jeweils gefolgt von Datei- oder Verzeichnisinhalten (aufgefüllt auf 512-Blockgröße mit 0 Bytes, falls erforderlich). Wenn Sie einen völlig leeren 512-Block für einen Header beobachten, bedeutet dies das Ende von .tar
archivieren.
Einige Leute denken, dass sogar .tar
auf Archivmitglieder kann nicht schnell zugegriffen werden, aber das ist nicht ganz WAHR. Wenn .tar
Das Archiv enthält nur wenige große Dateien, Sie können tatsächlich schnell in den nächsten Header suchen und so das erforderliche Archivmitglied in wenigen Suchvorgängen finden (könnte aber dennoch so viele Suchvorgänge erfordern, wie Archivmitglieder vorhanden sind). Wenn Ihr .tar
Das Archiv enthält viele kleine Dateien, was bedeutet, dass ein schnelles Abrufen von Mitgliedern selbst für unkomprimiertes .tar
praktisch unmöglich wird .
Wenn Sie nur eine Datei aus einer großen TAR-Datei extrahieren, verwenden Sie GNU tar
, und Sie können garantieren, dass die tar-Datei niemals angehängt wurde dann können Sie mit --occurrence
eine deutliche Leistungssteigerung erzielen .
Diese Option weist tar an, anzuhalten, sobald es das erste Vorkommen jeder angeforderten Datei findet, also z. B.
tar xf large-backup.tar --occurrence etc/passwd etc/shadow
wird nicht durch den gesamten Tarball spulen, nachdem es eine Kopie von jedem von passwd
gefunden hat und shadow
, stattdessen stoppt es. Wenn diese Dateien gegen Ende erscheinen, ist der Leistungsgewinn nicht sehr groß, aber wenn sie sogar auf halbem Weg durch eine 500-GB-Datei erscheinen, sparen Sie viel Zeit.
Für Leute, die tar
verwenden für Single-Shot-Backups und ohne echte Bandlaufwerke ist diese Situation wahrscheinlich der typische Fall.
Beachten Sie, dass Sie auch --occurrence=NUMBER
übergeben können um das NUMBER. Vorkommen jeder Datei abzurufen, was hilfreich ist, wenn Sie wissen, dass es gibt mehrere Versionen im Archiv. Standardmäßig entspricht das Verhalten einem NUMBER
von 1.
Wenn Sie es mit einem großen Tarball zu tun haben, verwenden Sie:
--fast-read
um nur den ersten Archiveintrag zu extrahieren, der mit dem Dateinamen-Operanden path/to/file
übereinstimmt in diesem Fall - was im Tarball sowieso immer einzigartig ist
tar -xvf file.tgz --fast-read path/to/file
Das obige wird suchen, bis es eine Übereinstimmung findet, und dann beenden