Назад | Перейти на главную страницу

Получить извлеченный размер из tgz перед извлечением

Можно ли получить размер, который займет tgz после извлечения, но без его извлечения? Я в основном хочу

tar tzf file.tgz
with sizes beside them. I'm really looking for a total, so a solution that gives total size but not specific file sizes would work.

Если он был сжат с использованием сжатия gzip, вы можете сделать что-то вроде:

gunzip -l filename.tar.gz

Поскольку tar не сжимается, это должно дать вам необходимую информацию.

Хм, я бы предпочел что-то вроде:

tar vtzf somefile.tar.gz |awk '{SUM += $3} END {print SUM}'
zcat file.tgz | wc -c

Дает вам количество символов, занятых несжатым файлом .tar, которое будет очень близко к правильному.

Я нахожу все сайты в Интернете и не решаю эту проблему, когда размер файла превышает 4 ГБ.

во-первых, что быстрее?

[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