如何从命令行中提取.tar.gz文件中未压缩文件总数的大小?
答案 0 :(得分:55)
如果您想从命令行执行此操作,可以尝试 -l </ strong>选项 gzip :
$ gzip -l compressed.tar.gz
compressed uncompressed ratio uncompressed_name
132 10240 99.1% compressed.tar
答案 1 :(得分:29)
这将汇总提取文件的总内容大小:
$ tar tzvf archive.tar.gz | sed 's/ \+/ /g' | cut -f3 -d' ' | sed '2,$s/^/+ /' | paste -sd' ' | bc
输出以字节为单位。
说明:tar tzvf
以ls -l
等详细格式列出存档中的文件。 sed
和cut
隔离文件大小字段。第二个sed
在每个大小的前面放置一个+,除了第一个paste
连接它们,给出一个和表达式然后由bc
计算。
请注意,这不包含元数据,因此文件在提取文件时占用的磁盘空间会更大 - 如果您有很多非常小的文件,可能会大很多倍。
答案 2 :(得分:23)
如果文件大小超过2Gb,则命令gzip -l archive.tar.gz
无效。我建议使用zcat archive.tar.gz | wc --bytes
代替非常大的文件。
答案 3 :(得分:4)
使用以下命令:
tar -xzf archive.tar.gz --to-stdout|wc -c
答案 4 :(得分:3)
我知道这是一个陈旧的答案;但是两年前我为这个写了一个工具。它被称为gzsize
,它为您提供了压缩文件的未压缩大小,而无需实际解压缩磁盘上的整个文件:
$ gzsize <your file>
答案 5 :(得分:2)
我在网上找到了所有网站,当文件大小超过4GB时,无法解决此问题。
首先,哪个更快?
[oracle@base tmp]$ time zcat oracle.20180303.030001.dmp.tar.gz | wc -c 6667028480 real 0m45.761s user 0m43.203s sys 0m5.185s
[oracle@base tmp]$ time gzip -dc oracle.20180303.030001.dmp.tar.gz | wc -c 6667028480 real 0m45.335s user 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 user 0m44.347s sys 0m4.981s
肯定, tar -xvf 是最快的,但是 ¿如何在获取标题后取消执行?
我的解决方案是:
[oracle@base tmp]$ time echo $(timeout --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 user 0m0.013s sys 0m0.066s
答案 6 :(得分:-1)
tar文件是未压缩的,除非它通过其他程序过滤,例如gzip,bzip2,lzip,compress,lzma等.tar文件的文件大小与提取的文件相同,可能更少添加了1kb的标题信息,使其成为有效的tarball。