Dekomprimiert tar -tvf die Datei oder listet sie nur die Namen auf?


9

Ich habe eine tar.gzDatei von 32 GB. Ich habe versucht, bestimmte Ordner daraus zu extrahieren, daher habe ich den Inhalt mit dem folgenden Befehl aufgelistet, um die Dateistruktur anzuzeigen:

tar -tvf file.tar.gz > files.txt

Es scheint ewig zu dauern, alle Dateien aufzulisten. Meine Frage ist, ob das Flag -t auch die Dateien extrahiert. Ich weiß, dass es nicht auf der Festplatte extrahiert wird, aber die Zeit, die es benötigt, lässt mich fragen, ob es sie tatsächlich in einer Art Puffer verarbeitet.


1
Sie haben die -zOption vergessen : tar -tvfz. Ähnlich: Was passiert, wenn Sie den Befehl tar tvf im Gegensatz zu tar tvfz verwenden?
smci

3
@smci: Es wird automatisch erkannt, also nicht wirklich vergessen.
Ry

Antworten:


14

tar.gz-Dateien haben keinen Index. Im Gegensatz zu Zip- oder anderen Archivformaten ist es weder trivial noch billig, eine Liste der enthaltenen Dateien oder anderer Metadaten zu erhalten. Um Ihnen zu zeigen, welche Dateien im Archiv enthalten sind, muss tar das Archiv tatsächlich dekomprimieren und die Dateien extrahieren, obwohl dies bei der -tOption nur im Speicher der Fall ist .

Wenn in Ihrem Anwendungsfall häufig die enthaltenen Dateien in einem Archiv aufgelistet werden, sollten Sie ein Archivformat verwenden, mit dem der komprimierten Datei ein Dateiindex hinzugefügt werden kann, z. B. zip.

Vielleicht möchten Sie auch das HDF5- Format für komplexere Szenarien betrachten.

Messungen

Ich musste nur einige Messungen durchführen, um meine Antwort zu beweisen, und einige Verzeichnisse mit vielen Dateien darin erstellen und sie beide packen, tar czf files#.tgz files#und zip -r files#.zip files#.

Für die Tests habe ich den Entpackungsbefehl jedes Mal zweimal ausgeführt und das Ergebnis des zweiten Durchlaufs verwendet, um zu vermeiden, dass die Geschwindigkeit der Festplatte gemessen wird.

Test 1

Verzeichnis files1mit 100.000 leeren Dateien .

$ time tar tzf files1.tgz >/dev/null
tar tzf files1.tgz > /dev/null  0,56s user 0,09s system 184% cpu 0,351 total
$ time unzip -l files1.zip >/dev/null
unzip -l files1.zip > /dev/null  0,30s user 0,34s system 99% cpu 0,649 total

zip ist hier langsamer.

Test 2

Verzeichnis files2mit 5.000 Dateien mit jeweils 512 Byte Zufallsdaten.

$ time tar tzf files2.tgz >/dev/null
tar tzf files2.tgz > /dev/null  0,14s user 0,03s system 129% cpu 0,131 total
$ time unzip -l files2.zip >/dev/null
unzip -l files2.zip > /dev/null  0,03s user 0,06s system 98% cpu 0,092 total

Immer noch nicht überzeugend, aber der Reißverschluss ist diesmal schneller.

Test 3

Verzeichnis files3mit 5.000 Dateien mit jeweils 5 KB zufälligen Daten.

$ time tar tzf files3.tgz >/dev/null
tar tzf files3.tgz > /dev/null  0,42s user 0,03s system 111% cpu 0,402 total
$ time unzip -l files3.zip >/dev/null
unzip -l files3.zip > /dev/null  0,03s user 0,06s system 99% cpu 0,093 total

In diesem Test ist zu erkennen, dass es für tar umso schwieriger ist, sie aufzulisten, je größer die Dateien werden.

Fazit

Für mich sieht es so aus, als würde zip einen kleinen Overhead verursachen, den Sie nur bei vielen sehr kleinen (fast leeren) Dateien bemerken werden, während es bei einer großen Anzahl größerer Dateien den Wettbewerb gewinnt, wenn es die im Archiv enthaltenen Dateien auflistet.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.