it-swarm.com.de

Überprüfen Sie die Gesamtinhaltgröße einer tar gz-Datei

Wie kann ich die Größe der gesamten unkomprimierten Dateidaten in einer .tar.gz-Datei von der Befehlszeile aus extrahieren?

43
Ztyx

Dies summiert die Gesamtinhaltgröße der extrahierten Dateien:

$ tar tzvf archive.tar.gz | sed 's/ \+/ /g' | cut -f3 -d' ' | sed '2,$s/^/+ /' | paste -sd' ' | bc

Die Ausgabe erfolgt in Bytes.

Erläuterung: tar tzvf listet die Dateien im Archiv in einem ausführlichen Format wie ls -l auf. sed und cut isolieren das Feld für die Dateigröße. Die zweite Variable sed setzt vor jeder Größe ein +, mit Ausnahme der ersten und der Variablen paste, die einen Summenausdruck ergibt, der von bc ausgewertet wird.

Beachten Sie, dass dies keine Metadaten umfasst. Daher wird der Speicherplatz, den die Dateien beim Extrahieren beanspruchen, größer werden - möglicherweise um ein Vielfaches, wenn Sie sehr viele kleine Dateien haben.

28
Ztyx

Wenn Sie dies über die Befehlszeile ausführen möchten, können Sie die Option -l für gzip versuchen:

$ gzip -l compressed.tar.gz
     compressed        uncompressed  ratio uncompressed_name
            132               10240  99.1% compressed.tar
53
Matthew Mott

Der Befehl gzip -l archive.tar.gz funktioniert nicht korrekt bei Dateigrößen von mehr als 2 GB. Ich würde stattdessen zcat archive.tar.gz | wc --bytes für wirklich große Dateien empfehlen.

23
swdev

Verwenden Sie den folgenden Befehl:

tar -xzf archive.tar.gz --to-stdout|wc -c
4
elec3647

Ich weiß, das ist eine alte Antwort. Ich habe aber vor zwei Jahren ein Werkzeug dafür geschrieben. Es heißt gzsize und gibt Ihnen die unkomprimierte Größe einer Gzip-Datei, ohne die gesamte Datei auf der Festplatte zu dekomprimieren:

$ gzsize <your file>
3
bfontaine

Ich finde alles Websites im Web und löse dieses Problem nicht. Die Größe der Datei ist größer als 4 GB.

zuerst, was ist am schnellsten?

 [Oracle @ base tmp] $ time zcat Oracle.20180303.030001.dmp.tar.gz | wc -c 
 6667028480 

 real 0m45.761s 
 Benutzer 0m43.203s 
 sys 0m5.185s 
 [Oracle @ base tmp] $ time gzip -dc Oracle.20180303.030001.dmp.tar.gz | wc -c 
 6667028480 

 real 0m45.335s 
 Benutzer 0m42.781s 
 sys 0m5.153s 
 [Oracle @ base tmp] $ time tar -tvf Oracle.20180303.030001.dmp.tar.gz 
 -rw-r - r-- Oracle/oinstall 111828 2018-03-03 03:05 Oracle.20180303.030001.log 
 -rw-r ----- Oracle/oinstall 6666911744 2018-03-03 03:05 Oracle.20180303.030001.dmp 

 real 0m46.669s 
 Benutzer 0m44.347s 
 sys 0m4.981s 

auf jeden Fall ist tar -xvf am schnellsten, aber ¿Wie kann ich die Ausführung nach Header abbrechen?

meine Lösung ist dies :

 [Oracle @ base tmp] $ time echo $ (Zeitüberschreitung - Signal = SIGINT 1s tar -tvf Oracle.20180303.030001.dmp.tar.gz | awk '{print $ 3}') | grep -o '[[: digit:]] *' | awk '{sum + = $ 1} END {Drucksumme}' 
 6667023572 

 real 0m1.005s 
 Benutzer 0m0.013s 
 sys 0m0.066s 

2
RaZieRSarE