检查 tar gz 文件的总内容大小

发布于 2024-08-29 21:58:46 字数 39 浏览 6 评论 0原文

如何从命令行提取 .tar.gz 文件中未压缩文件数据的总大小?

How can I extract the size of the total uncompressed file data in a .tar.gz file from command line?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(7

爱给你人给你 2024-09-05 21:58:46

这适用于任何文件大小:

zcat archive.tar.gz | wc -c

对于小于 4Gb 的文件,您还可以将 -l 选项与 gzip 一起使用:

$ gzip -l compressed.tar.gz
     compressed        uncompressed  ratio uncompressed_name
            132               10240  99.1% compressed.tar

This works for any file size:

zcat archive.tar.gz | wc -c

For files smaller than 4Gb you could also use the -l option with gzip:

$ gzip -l compressed.tar.gz
     compressed        uncompressed  ratio uncompressed_name
            132               10240  99.1% compressed.tar
装纯掩盖桑 2024-09-05 21:58:46

这将总结提取的文件的总内容大小:

$ tar tzvf archive.tar.gz | sed 's/ \+/ /g' | cut -f3 -d' ' | sed '2,$s/^/+ /' | paste -sd' ' | bc

输出以字节为单位。

说明:tar tzvf 以详细格式(如 ls -l)列出存档中的文件。 sedcut 隔离文件大小字段。第二个 sed 在除第一个之外的每个大小前面放置一个 +,然后 paste 将它们连接起来,给出一个和表达式,然后由 bc 计算该表达式。

请注意,这不包括元数据,因此当您提取文件时,文件占用的磁盘空间将会更大 - 如果您有很多非常小的文件,则可能会大很多倍。

This will sum the total content size of the extracted files:

$ tar tzvf archive.tar.gz | sed 's/ \+/ /g' | cut -f3 -d' ' | sed '2,$s/^/+ /' | paste -sd' ' | bc

The output is given in bytes.

Explanation: tar tzvf lists the files in the archive in verbose format like ls -l. sed and cut isolate the file size field. The second sed puts a + in front of every size except the first and paste concatenates them, giving a sum expression that is then evaluated by bc.

Note that this doesn't include metadata, so the disk space taken up by the files when you extract them is going to be larger - potentially many times larger if you have a lot of very small files.

看海 2024-09-05 21:58:46

对于大于 2Gb 的文件大小,命令 gzip -l archive.tar.gz 无法正常工作。我会推荐zcat archive.tar.gz | wc --bytes 而不是非常大的文件。

The command gzip -l archive.tar.gz doesn't work correctly with file sizes greater than 2Gb. I would recommend zcat archive.tar.gz | wc --bytes instead for really large files.

相权↑美人 2024-09-05 21:58:46

我知道这是一个古老的答案;但两年前我专门为此编写了一个工具。它称为 gzsize,它为您提供 gzip 的未压缩大小' ed 文件而不实际解压缩磁盘上的整个文件:

$ gzsize <your file>

I know this is an old answer; but I wrote a tool just for this two years ago. It’s called gzsize and it gives you the uncompressed size of a gzip'ed file without actually decompressing the whole file on disk:

$ gzsize <your file>
风渺 2024-09-05 21:58:46

使用以下命令:

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

Use the following command:

tar -xzf archive.tar.gz --to-stdout|wc -c
如何视而不见 2024-09-05 21:58:46

我在网络上找到了所有网站,但当文件大小大于 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

I'm finding everything sites in the web, and don't resolve this problem the get size when file size is bigger of 4GB.

first, which is most faster?

[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

definitely, tar -xvf is the most faster, but
¿how to cancel executions after get header?

my solution is this:

[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

旧瑾黎汐 2024-09-05 21:58:46

tar 文件被解压缩,直到/除非通过其他程序过滤,例如 gzip、bzip2、lzip、compress、lzma 等。tar 文件的文件大小与解压缩的文件相同,可能小于 1kb添加标头信息以使其成为有效的 tarball。

A tar file is uncompressed until/unless it is filtered through another program, such as gzip, bzip2, lzip, compress, lzma, etc. The file size of the tar file is the same as the extracted files, with probably less than 1kb of header info added in to make it a valid tarball.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文