web-dev-qa-db-fra.com

Vérifier la taille totale du contenu d'un fichier tar gz

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

43
Ztyx

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.

28
Ztyx

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
53
Matthew Mott

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.

23
swdev

Utilisez la commande suivante:

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

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>
3
bfontaine

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 

2
RaZieRSarE