I have a 32GB .tar.gz archive and I'd like to know the size of the files if I unpack this compressed archive. I'd like to avoid unpacking the archive first and than use e.g. du.
Is it also possible to find out the size of the contained files without unpacking the compressed archive (on a Linux and/or MacOSX system)?
For another archive I know, that it also contains .tar.gz files. Is it also possible to calculate the size of the unpacked archives that are contained within an archive? (for example by setting a level to which the "unpacking" should be simulated?)
23 Answers
Sure. Just use -tv to list the contents with their sizes. E.g.
% tar -tvzf sometools2.tar.gz -rw-r--r-- madler/admin 3442 2005-02-27 21:40 pngdat.c -rw-r--r-- madler/admin 24938 2005-02-27 21:39 infgen.c If you want to add up the sizes (like du), you can use awk:
% tar -tvzf sometools2.tar.gz|awk '{ s += $3 } END { print s }' 28380 For an imbedded .tar.gz file, you would need to do those individually when you find them by sending them to stdout with -O:
% tar -tvzf imbed.tar.gz -rw-r--r-- madler/staff 505 2012-02-12 00:06 lucas.c -rw-r--r-- madler/staff 27913 2005-03-20 11:10 lzwtry.c -rw-r--r-- madler/staff 8314 2005-02-27 21:42 sometools2.tar.gz % tar -xOzf imbed.tar.gz sometools2.tar.gz | tar -tvzf - | awk '{ s += $3 } END { print s }' 28380 You can write a script to find those in the -tv output and then extract them, and even do it recursively. I will leave that as an exercise for the reader.
Note, these options are for GNU tar, which is what is on both Linux and Mac OS X. The options for BSD tar may be different.
0First, you should know that the .tar.gz suffix means it's a compressed tar file. tar is just a means of packing multiple files and directories into one file. It does not have any compression by default. This is where gzip comes in. It's a tool for compressing a single file. Hence the aforementioned suffix means it's a compressed bundle of files and/or directories.
If you want to see the compression rates for each file in a zipped tar bundle, see the answer by Mark Adler.
If you are only interested in the whole zipped file (or bundle), the correct way of determining the unpacked size is:
gunzip -l ${file} Example output:
$ gunzip -l syslog.1.gz compressed uncompressed ratio uncompressed_name 4465670 33295551 86.6% syslog.1 The compressed and uncompressed numbers show bytes. Ergo my syslog.1 file would be about 32 MB uncompressed.
I don't know how to do something like this on the terminal (AFAIK it is not possible). But most programming libs for extracting archives also allow to query content information (e.g. tree, size of content) without extracting the whole compressed contents.
So you could create a command line tool with any programming language that will fit your needs and then call it from the command line.