如何在不解压缩 .tar.gz 的情况下获取其文件大小(原始文件大小)?

如何在不解压缩 .tar.gz 的情况下获取其文件大小(原始文件大小)?

我使用以下命令将 myfile.txt 制作成 zip 文件,有没有办法在不解压的情况下获取“myfile.txt”的原始文件大小。

tar -czf myfile.tar.gz myfile.txt

答案1

要获取 ZIP 文件的未压缩大小,我们可以执行压缩可选择--list-l

gzip -l mytext.txt.tar.gz

这将给出类似这样的输出

gzip -l mytext.txt.tar.gz
         compressed        uncompressed  ratio uncompressed_name
               1475                4608  68.4% mytext.txt.tar

获得压缩文件大小、未压缩大小和压缩率。

答案2

您可以使用以下命令列出 tar 文件的内容(包括原始文件大小):

tar -vtf myfile.tar.gz

如果你只想要myfile.txt

tar -vtf myfile.tar.gz myfile.txt

这仅当您添加完整文件路径时才有效,否则使用:

tar -vtf myfile.tar.gz | grep myfile.txt

请注意,tar 必须解压档案才能获取文件信息。不过它会向您隐藏这些信息。

如果您特别需要一种无需解压整个档案即可获取文件元数据的方法,那么最好使用 zip 来存储文件和目录。Zip 在 zip 文件末尾使用一个“中央目录”来存储所有文件元数据。

答案3

我在网上找到了所有网站,但都没有解决文件大小大于 4GB 时获取大小的问题。

首先,哪个最快?

[oracle@base tmp]$ time zcat oracle.20180303.030001.dmp.tar.gz | wc -c
    6667028480

    实际 0 分 45.761 秒
    用户 0m43.203s
    系统 0分5.185秒
[oracle@base tmp]$ time gzip -dc oracle.20180303.030001.dmp.tar.gz | wc -c
    6667028480

    实际 0m45.335s
    用户 0m42.781s
    系统 0 分 5.153 秒
[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

    实际 0分46.669秒
    用户 0m44.347s
    系统 0 分 4.981 秒

确实,焦油-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

实际 0分1.029秒
用户 0分0.012秒
系统 0分0.063秒

相关内容