Comment extraire la taille de la totalité des données du fichier non compressé dans un fichier .tar.gz à partir de la ligne de commande
Ceci additionnera la taille totale du contenu des fichiers extraits:
$ tar tzvf archive.tar.gz | sed 's/ \+/ /g' | cut -f3 -d' ' | sed '2,$s/^/+ /' | paste -sd' ' | bc
La sortie est donnée en octets.
Explication: tar tzvf
répertorie les fichiers de l’archive au format détaillé, comme ls -l
. sed
et cut
isolent le champ de taille de fichier. La seconde sed
met un + devant chaque taille sauf la première et paste
les concatène, donnant une expression somme qui est ensuite évaluée par bc
.
Notez que cela n'inclut pas les métadonnées. Par conséquent, l'espace disque occupé par les fichiers lors de leur extraction va être plus important, voire plusieurs fois plus si vous avez beaucoup de très petits fichiers.
Si vous voulez faire cela depuis la ligne de commande, vous pouvez essayer l'option -l de gzip :
$ gzip -l compressed.tar.gz
compressed uncompressed ratio uncompressed_name
132 10240 99.1% compressed.tar
La commande gzip -l archive.tar.gz
ne fonctionne pas correctement avec des fichiers dont la taille est supérieure à 2 Go. Je recommanderais plutôt zcat archive.tar.gz | wc --bytes
pour les fichiers très volumineux.
Utilisez la commande suivante:
tar -xzf archive.tar.gz --to-stdout|wc -c
Je sais que c'est une vieille réponse. mais j'ai écrit un outil juste pour cela il y a deux ans. Il s’appelle gzsize
et vous donne la taille non compressée d’un fichier gzip, sans décompresser le fichier entier sur le disque:
$ gzsize <your file>
Je trouve tous les sites Web et ne résous pas le problème lorsque le fichier est plus gros que 4 Go.
d'abord, lequel est le plus rapide?
[Oracle @ base tmp] $ time zcat Oracle.20180303.030001.dmp.tar.gz | wc -c 6667028480 réel 0m45.761s utilisateur 0m43.203s sys 0m5.185s
[Oracle @ base tmp] $ time gzip -dc Oracle.20180303.030001.dmp.tar.gz | wc -c 6667028480 0m45.335s réel utilisateur 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 réel 0m46,669s utilisateur 0m44,347s sys 0m4,981s
définitivement, tar -xvf est le plus rapide, mais Comment annuler les exécutions après avoir un en-tête?
ma solution est la suivante :
[Oracle @ base tmp] $ time echo $ (délai --signal = SIGINT 1s tar -tvf Oracle.20180303.030001.dmp.tar.gz | awk '{print $ 3}') | grep -o '[[: digit:]] *' | awk '{sum + = $ 1} END {print sum}' 6667023572 real 0m1.005s utilisateur 0m0,013s sys 0m0.066s