Wie kann ich die Größe der gesamten unkomprimierten Dateidaten in einer .tar.gz-Datei von der Befehlszeile aus extrahieren?
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.
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
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.
Verwenden Sie den folgenden Befehl:
tar -xzf archive.tar.gz --to-stdout|wc -c
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>
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