Подтвердить что ты не робот

Проверьте общий размер содержимого файла tar gz.

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

4b9b3361

Ответ 1

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

$ 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

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

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

Ответ 3

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

Ответ 4

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

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

Ответ 5

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

$ gzsize <your file>

Ответ 6

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

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

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

    real    0m45.761s
    user    0m43.203s
    sys     0m5.185s
[[email protected] tmp]$ time gzip -dc oracle.20180303.030001.dmp.tar.gz | wc -c
    6667028480

    real    0m45.335s
    user    0m42.781s
    sys     0m5.153s
[[email protected] 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 самый быстрый, но but как отменить выполнение после получения заголовка?

мое решение таково:

[[email protected] 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

Ответ 7

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