Как я могу извлечь размер всех несжатых данных файла в файле .tar.gz из командной строки?
Проверьте общий размер содержимого файла tar gz.
Ответ 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.