Проверьте общий размер содержимого файла tar gz - PullRequest
45 голосов
/ 26 апреля 2010

Как извлечь из командной строки размер общих несжатых данных в файле .tar.gz?

Ответы [ 7 ]

55 голосов
/ 30 апреля 2010

Если вы хотите сделать это из командной строки, вы можете попробовать опцию -l для gzip :

$ gzip -l compressed.tar.gz
     compressed        uncompressed  ratio uncompressed_name
            132               10240  99.1% compressed.tar
29 голосов
/ 30 июля 2012

Суммирует общий размер содержимого извлеченных файлов:

$ 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.

Обратите внимание, что сюда не входят метаданные, поэтому дисковое пространство, занимаемое файлами при их извлечении, будет больше - потенциально во много раз больше, если у вас много очень маленьких файлов.

23 голосов
/ 11 апреля 2013

Команда gzip -l archive.tar.gz не работает правильно с размерами файлов более 2 ГБ. Я бы порекомендовал zcat archive.tar.gz | wc --bytes вместо очень больших файлов.

4 голосов
/ 03 июня 2013

Используйте следующую команду:

tar -xzf archive.tar.gz --to-stdout|wc -c
3 голосов
/ 25 октября 2016

Я знаю, что это старый ответ; но я написал инструмент только для этого два года назад. Он называется gzsize и дает вам несжатый размер файла gzip без фактической распаковки всего файла на диске:

$ gzsize <your file>
2 голосов
/ 08 марта 2018

Я нахожу все сайты в Интернете и не решаю эту проблему, получая размер, когда размер файла больше 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

    real    0m1.005s
    user    0m0.013s
    sys     0m0.066s

0 голосов
/ 06 июня 2011

Файл tar распаковывается до тех пор, пока / или он не будет отфильтрован другой программой, такой как gzip, bzip2, lzip, compress, lzma и т. Д. Размер файла tar такой же, как и у извлеченных файлов, вероятно, с добавлено более 1 КБ информации заголовка, чтобы сделать его действительным архивом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...