Обсуждение архиваторов

Софт под Linux, разные программы, но только связанные с Linux

Модератор: /dev/random

NickLion
Сообщения: 3408
Статус: аватар-невидимка
ОС: openSUSE Tumbleweed x86_64

Re: Обсуждение архиваторов

Сообщение NickLion »

Flaming писал(а):
16.01.2010 23:54
NickLion, как он может забывать файлы, если он сам ничего не запаковывает, а использует стороннюю программу? На неё всё и спихиваете.

И тем не менее, арк этот же архив распаковывал без проблем. Это проявлялось, если распаковывать не сразу весь архив, а зайти внутрь и через F5. И иногда не всё распаковывалось.
Спасибо сказали:
Аватара пользователя
Luinnar
Сообщения: 246
ОС: Solaris, Debian, Ubuntu

Re: Обсуждение архиваторов

Сообщение Luinnar »

rm_ писал(а):
15.01.2010 22:33
Luinnar писал(а):
15.01.2010 21:15
Как видно xz -9 лидирует по степени сжатия с отрывом в два раза! Но нужно сказать, что и памяти он потреблял > 350 Mb.
Кстати, 7zip идёт на равне с "xz -7" только жмёт гораздо быстрее, уж не поэтому ли 7zip имеет цифру 7 в названии? шутка. а совпадение забавное. :)

Крайне странный результат, больше похоже на глюк. Может он там сегфолтнулся на середине, не дописав архив? :)
Или памяти-таки не хватило?)
Попробуйте проверить, что 17-меговый распаковывается в неповреждённый tar-файл.

Я проверил всё корректно.
Как проверял:
Создал tar архив, запаковал его с помощью "xz -9", переименовал оригинальный архив, распаковал tar.xz9 архив и, наконец, сравнил полученный tar с оригинальным с помощью программ diff и cmp. Файлы оказались абсолютно одинаковыми.

Кстати, посмотрел сколько потребляется памяти во время архивации этих файлов (72Mb imap mail box):

Код: Выделить всё

xz -9:   674Mb
xz -8:   370Mb
7z:        193Mb


Запустил xz с максимальным сжатием и с ограничением по памяти в 350M (xz -9 --memory=350M) - xz написал, что уменьшает размер словаря:
xz: Adjusted LZMA2 dictionary size from 64 MiB to 30 MiB to not exceed the memory usage limit of 352 MiB

и на выходе получил те самые 30Mb, что и со степенью сжатия -8. Так что всё дело в размере словаря и в доступной памяти. В манах вычитал, что xz ограничивает потребление системной памяти до 40%.

+
Запускал на ночь повторное тестирование для исходников, включающее xz с различными степенями сжатия:

Код: Выделить всё

============================================
    378M    source code
--------------------------------------------
type    size    compress_time   extract_time
----    ----    -------------   ------------
tar.xz9  65526920        3:28.0  41.5
tar.xz8  66246020        3:26.1  40.9
tar.xz7  67050752        3:23.3  39.5
tar.7z   67792249        1:46.3  42.1
tar.xz   68686588        3:19.3  39.8
tar.xz6  68686588        3:19.9  42.1
7z       68773748        1:43.0  44.7
tar.lzma 68827012        3:21.7  41.9
tar.xz5  71964364        2:28.1  41.6
tar.xz4  74851752        2:27.4  43.2
tar.xz3  77789188        2:26.4  40.6
tar.xz2  83524288        51.6    41.3
tar.bz2  92384314        2:51.7  46.5
tar.xz1  95765372        37.6    45.8
tar.xz0  98239184        35.5    44.9
rar      105805529       2:04.8  -
tar.gz   106120786       16.2    38.0
zip      114070861       17.4    33.5
============================================
Спасибо сказали:
Аватара пользователя
Luinnar
Сообщения: 246
ОС: Solaris, Debian, Ubuntu

Re: Обсуждение архиваторов

Сообщение Luinnar »

И наконец последний, третий тест. Добавил xz -9, который вышел на первое место по степени сжатия с отрывом в 12% от 7zip, что стоило удвоения затраченного времени:

Код: Выделить всё

============================================
    733M    imap mail box
--------------------------------------------
type    size    compress_time   extract_time
----    ----    -------------   ------------
tar.xz9  217184256       9:59.1  31.8
7z       247761545       4:19.0  46.6
tar.7z   247868452       4:05.2  53.4
tar.lzma 257929044       7:47.1  1:28.5
tar.xz   257969224       7:30.7  48.2
rar      281261905       5:57.9  44.7
tar.bz2  359186147       5:20.9  1:26.7
tar.gz   383313519       1:04.6  47.9
zip      383452624       1:05.6  41.2
============================================


Выводы такие:
1. Критична скорость - выбираем gz.
2. Критичен размер - выбираем xz -9.
3. Если важен как размер, так и скорость, то здесь лучше всего подойдёт 7zip.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Обсуждение архиваторов

Сообщение drBatty »

итого: лучший архиватор по степень сжатия на сегодня xz -9. его и надо использовать в скриптах и т.д.
ну а ручками удобнее всего 7z.
А самый быстрый видимо gzip (думаю для сжатия простых вещей(для сжатия), например образа где 90% - нули лучше всего пойдёт gzip -1, другие будут работать намного медленнее, а результат будет не намного лучше)

ЗЫЖ это для себя, файлы для других ИМХО лучше всего жать tar.bz2, пользователи Windows распакуют это раром, который установлен почти у всех)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Luinnar
Сообщения: 246
ОС: Solaris, Debian, Ubuntu

Re: Обсуждение архиваторов

Сообщение Luinnar »

drBatty писал(а):
18.01.2010 12:11
ЗЫЖ это для себя, файлы для других ИМХО лучше всего жать tar.bz2, пользователи Windows распакуют это раром, который установлен почти у всех)

Согласен, если архив для кого-то, то лучше всего одним из наиболее распространённых архиваторов пользоваться: tar.bz2, tar.gz или вообще zip.
Спасибо сказали:
sciko
Сообщения: 1744
Статус: Ъ-участник
ОС: Debian/Ubuntu/etc

Re: Обсуждение архиваторов

Сообщение sciko »

Я вот смотрю на всё это безобразие и думаю, что было бы очень неплохо, если бы Luinnar сообщил бы нам что именно он сжимает. Ведь для архиватора разница между даже английским тестом и сырцами очень не хилая. Кроме того, могут использоваться всякие предобработки улучшающие сжатие. Кроме того, сжимается судя по всему текст, а хотелось бы увидеть тесты и для бинарников, и blob'ов.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Обсуждение архиваторов

Сообщение drBatty »

я ещё хотел-бы добавить, что всё сильно зависит от файлов, и от назначения архива:
рар с большим словарём (что-бы жрал память как xz) и с максимальной степенью сжатия жмёт лучше всех (как и 7z с включённым PPMD), однако при этом очень долго всё жмётся, и что самое важное - декомпрессия занимает ровно столько-же времени и ресурсов как и компрессия (выше в тесте это не так, потому-что рар был включен по умолчанию, а по умолчанию там улучшенный LZ77/78, как в ZIP/gzip, вот и результат примерно такой-же).

Если результат сжатия планируется записать на болванку, а потом его постоянно использовать, то лучше всего 7z (с LZMA), xz -9 и остальные архиваторы, которые распаковывают значительно быстрее чем пакуют.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Обсуждение архиваторов

Сообщение drBatty »

sciko писал(а):
18.01.2010 12:49
Я вот смотрю на всё это безобразие и думаю, что было бы очень неплохо, если бы Luinnar сообщил бы нам что именно он сжимает.

там-же написано - почтовый ящик и исходники.
а вот от того КАКОЙ текст очень многое действительно зависит - потому и rar упаковал лучше чем gzip: в последнем нету разных оптимизаций для текстов(на сколько я знаю), а в раре есть. При этом алгоритм почти одинаковый.
sciko писал(а):
18.01.2010 12:49
Кроме того, сжимается судя по всему текст, а хотелось бы увидеть тесты и для бинарников, и blob'ов.

а где их брать-то? большие файлы есть, но они либо
1)на самом деле - текст, вроде MySQL базы форума
2)уже архивы
3)мультимедиа - тоже на самом деле архивы
4)не сжатая мультимедиа - её лучше жать спец-софтом, например для звука mpeg1 layer3(mp3), ogg, vw...
пункты 2 и 3 несжимаемы, пункт 1 жмётся как текст.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: Обсуждение архиваторов

Сообщение rm_ »

ЗЫЖ это для себя, файлы для других ИМХО лучше всего жать tar.bz2, пользователи Windows распакуют это раром, который установлен почти у всех)

Виндовый RAR формат 7z тоже открывает и распаковывает, так что препятствий к использованию 7z нет никаких.

Согласен, если архив для кого-то, то лучше всего одним из наиболее распространённых архиваторов пользоваться: tar.bz2, tar.gz или вообще zip.

Только если там нет русских имён файлов. Если есть - тогда тоже, предпочтение лучше отдать 7z.
Спасибо сказали:
Аватара пользователя
Luinnar
Сообщения: 246
ОС: Solaris, Debian, Ubuntu

Re: Обсуждение архиваторов

Сообщение Luinnar »

sciko писал(а):
18.01.2010 12:49
Я вот смотрю на всё это безобразие и думаю, что было бы очень неплохо, если бы Luinnar сообщил бы нам что именно он сжимает. Ведь для архиватора разница между даже английским тестом и сырцами очень не хилая. Кроме того, могут использоваться всякие предобработки улучшающие сжатие. Кроме того, сжимается судя по всему текст, а хотелось бы увидеть тесты и для бинарников, и blob'ов.

Я же написал, что именно архивируется: 378 Мб исходников и два e-mail ящика программы thunderbird разных размеров. Исходники - считай, что англ текст, а в ящиках данные смешанные, как текст, так и бинарные данные.

drBatty писал(а):
18.01.2010 13:00
sciko писал(а):
18.01.2010 12:49
Кроме того, сжимается судя по всему текст, а хотелось бы увидеть тесты и для бинарников, и blob'ов.

а где их брать-то? большие файлы есть, но они либо
1)на самом деле - текст, вроде MySQL базы форума
2)уже архивы
3)мультимедиа - тоже на самом деле архивы
4)не сжатая мультимедиа - её лучше жать спец-софтом, например для звука mpeg1 layer3(mp3), ogg, vw...
пункты 2 и 3 несжимаемы, пункт 1 жмётся как текст.

Можно запускаемые файлы и библиотеки сжимать.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Обсуждение архиваторов

Сообщение drBatty »

rm_ писал(а):
18.01.2010 13:02
Виндовый RAR формат 7z тоже открывает и распаковывает, так что препятствий к использованию 7z нет никаких.

у меня вот не было 7z... а unrar не умеет.
rm_ писал(а):
18.01.2010 13:02
Только если там нет русских имён файлов. Если есть - тогда тоже, предпочтение лучше отдать 7z.

насколько я помню, если распаковать винраром наш tar.bz2, то русские имена не побьются. они побьются если расспаковывать наш zip - у винрара не хватает интеллекта определить, что это не та кодировка.
UPD: нет, попробовал - WinRAR бьёт русские имена в tar.bz2. причём так криво... СЂСѓРіРѕР№_канал
видимо лучше всего и в правду 7z.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Обсуждение архиваторов

Сообщение drBatty »

Luinnar писал(а):
18.01.2010 13:08
Можно запускаемые файлы и библиотеки сжимать.

там маленькие файлы. дистрибутивы большие, но их никто не сжимает целиком. а на файлах в 50К особенно и не разгуляешься.
Хотя создатели SLAX считают что их пакеты в lzma значительно меньше.

Cейчас попробую папку WINDOWS из ХП сжать...

UPD: оЁ! 1.2Гб получилось! сейчас начну...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
sciko
Сообщения: 1744
Статус: Ъ-участник
ОС: Debian/Ubuntu/etc

Re: Обсуждение архиваторов

Сообщение sciko »

drBatty писал(а):
18.01.2010 13:21
дистрибутивы большие, но их никто не сжимает целиком.
Я таки удивлю, но сжимают. Все LiveCD -- это сжатая ФС SquashFS. Так что тут есть где разгуляться.
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: Обсуждение архиваторов

Сообщение rm_ »

drBatty писал(а):
18.01.2010 13:15
rm_ писал(а):
18.01.2010 13:02
Виндовый RAR формат 7z тоже открывает и распаковывает, так что препятствий к использованию 7z нет никаких.

у меня вот не было 7z... а unrar не умеет.

Я про виндовый RAR говорил (WinRAR), он успешно распаковывает формат 7z.
Если же речь про *никсовые машины, вероятность найти там p7zip в разы выше, чем несвободную версию unrar.

drBatty писал(а):
18.01.2010 13:15
rm_ писал(а):
18.01.2010 13:02
Только если там нет русских имён файлов. Если есть - тогда тоже, предпочтение лучше отдать 7z.

насколько я помню, если распаковать винраром наш tar.bz2, то русские имена не побьются. они побьются если расспаковывать наш zip - у винрара не хватает интеллекта определить, что это не та кодировка.
UPD: нет, попробовал - WinRAR бьёт русские имена в tar.bz2. причём так криво... СЂСѓРіРѕР№_канал
видимо лучше всего и в правду 7z.

Побьются, не побьются, что за шаманство?
Всё тут ясно как день. Единственный из перечисленных форматов, который явно задаёт, в какой кодировке он хранит имена файлов - это 7z. Хранит он их всегда строго в UTF-8, вне зависимости, где создавался архив, хоть на винде, хоть на какой-нибудь FreeBSD с древней KOI8-R. Поэтому и распаковать можно где угодно, всегда с правильным преобразованием национальных символов из кодировки архива в локальную (на ФС).
В остальных же форматах, имя файла - это просто некий "поток байт". Совпала кодировка у системы создававшей архив, и у системы распаковывающей - увидим русские имена. Не совпала - увидим всё что угодно.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Обсуждение архиваторов

Сообщение drBatty »

rm_ писал(а):
18.01.2010 13:50
Всё тут ясно как день. Единственный из перечисленных форматов, который явно задаёт, в какой кодировке он хранит имена файлов - это 7z.

согласен. проблема в том, что 7z не просто "единственный что задаёт", а вообще единственный, не считая тара.
а с tar'ом я сам мучаюсь, переименовывая файлы из utf-8 в koi8-r (при переносе на старый компьютер), проблема в том, что tar мне не заменить на 7z, т.к. это часть скрипта, который делает ещё много чего. кроме того, мне лень собирать 7z для старого компьютера.
ЗЫЖ

Shell

$ time -p gzip -vv windows.tar windows.tar: 54.5% -- replaced with windows.tar.gz real 180.84 user 129.07 sys 5.16 1 213 399 040 windows.tar 552 634 792 windows.tar.gz


Shell

$ time -p bzip2 -v windows.tar windows.tar: 2.301:1, 3.477 bits/byte, 56.53% saved, 1213399040 in, 527426321 out. real 824.09 user 736.43 sys 6.24

ну вот... почти никакой разницы. только время 824 против 180

Shell

$ time -p xz -vv windows.tar xz: Filter chain: --lzma2=dict=8388608,lc=3,lp=0,pb=2,mode=normal,nice=64,mf=bt4,depth=0 xz: 93 MiB (97 620 127 B) of memory is required per thread, limit is 195 MiB (205 371 801 B) windows.tar (1/1) 100,0 % 422,3 MiB / 1 157,2 MiB = 0,365 758 KiB/s 26:04s real 1569.75 user 1381.01 sys 14.64

ох... долго-то как!!! полчаса...
стоит-ли это 9%? по сравнению с результатом bzip2?
ИМХО - почти никогда не нужно. разве-что архив не лезет на болванку и т.д.


Итого: лучше всего бинарники жать gzip'ом. ЧТД
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Обсуждение архиваторов

Сообщение drBatty »

rm_ писал(а):
18.01.2010 13:50
Не совпала - увидим всё что угодно.

есть iconv, потому я вижу то что надо. :)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Flaming
Сообщения: 2579

Re: Обсуждение архиваторов

Сообщение Flaming »

rm_ писал(а):
09.01.2010 03:28
Похоже всё идёт к тому, что новым стандартом де-факто становится xz. Его поддержку добавили в GNU tar, в виде ключа -J.

Что-то у себя в man tar оного не нашёл. Какая у вас версия?

Код: Выделить всё

[I] app-arch/tar
     Available versions:  1.20 ~1.21-r1 ~1.22 {nls static userland_GNU}
     Installed versions:  1.20(17:19:27 15.01.2010)(nls userland_GNU -static)
     Homepage:            http://www.gnu.org/software/tar/
     Description:         Use this to make tarballs :)
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Обсуждение архиваторов

Сообщение drBatty »

tar --help
...
-J, --xz filter the archive through xz
...

$ tar --version
tar (GNU tar) 1.22
Copyright © 2009 Free Software Foundation, Inc.
License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.
This is free software: you are free to change and redistribute it.
There is NO WARRANTY, to the extent permitted by law.

Written by John Gilmore and Jay Fenlason.


Flaming писал(а):
18.01.2010 15:41
Что-то у себя в man tar оного не нашёл. Какая у вас версия?

в мане может ещё нету. не вставили пока.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Flaming
Сообщения: 2579

Re: Обсуждение архиваторов

Сообщение Flaming »

У меня версия 1.20 (я же написал), у вас 1.22. Обновлюсь тогда. :)
Спасибо сказали:
Аватара пользователя
Luinnar
Сообщения: 246
ОС: Solaris, Debian, Ubuntu

Re: Обсуждение архиваторов

Сообщение Luinnar »

drBatty писал(а):
18.01.2010 13:58
ох... долго-то как!!! полчаса...
стоит-ли это 9%? по сравнению с результатом bzip2?
ИМХО - почти никогда не нужно. разве-что архив не лезет на болванку и т.д.

Итого: лучше всего бинарники жать gzip'ом. ЧТД

Раз уж начали, попробуйте ещё 7zip и xz -9, интересно же. :)
Ещё примечательно, что уровень сжатия -9 увеличивает использование памяти, но практически не меняет время кодирования по сравнению с дефолтным -6.
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Обсуждение архиваторов

Сообщение drBatty »

Luinnar писал(а):
18.01.2010 17:00
Раз уж начали, попробуйте ещё 7zip и xz -9, интересно же.

не могу я xz -9, памяти не хватит.
Luinnar писал(а):
18.01.2010 17:00
Ещё примечательно, что уровень сжатия -9 увеличивает использование памяти, но практически не меняет время кодирования по сравнению с дефолтным -6.

угу. а у меня всё тормозится. всего 504Мб :(
7z делать долго и сложно. я и так представляю - вы-же сами видите, нет особой разницы, везде 50%.
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Sleeping Daemon
Сообщения: 1450

Re: Обсуждение архиваторов

Сообщение Sleeping Daemon »

InterChaynik писал(а):
08.01.2010 18:56
drBatty писал(а):
08.01.2010 04:21
PS: у вендо-юзеров есть WinRAR, а у нас есть tar|bzip2, который не хуже, причём *.tar.bz2 открывается в венде обычным винраром.
А для открытия архивов из венды у нас есть нативный бесплатный и легальный unrar.
В упор не вижу проблемы?


strephil писал(а):
08.01.2010 17:05
tar + {gzip, bzip, lzma} — работает везде.
7z — работает везде.

По-моему, есть из чего выбирать (:


В принципе так. Отмечу только вот что:
1) bzip2 и .tar.bz2 что-то слабо как-то сжимают, а tar так вообще, по-моему, вообще не сжимает, а иногда, архив tar размером даже больше чем сам файл;
2) "unrar-free", при отсутствии в сис-ме пакета rar, адекватно, лично у меня, не работает;
3) извините, в Виндовс 7Zip (грубо говоря) - это не то только архив, но и программа такая, а есть ли аналогичная под Линукс, чтоб как в Винде могла похвастаться мощью, всеядностью (поддерживает очень много форматов) и функционалом?

1. Вы не пробовали man bzip2 почитать? а man tar? Нет? Жаль.
2. Для линукса есть 7zip, пакет/программа называется p7zip. Гуй есть, Q7Z называется. Тут обитает: http://code.google.com/p/k7z/
Спасибо сказали:
Аватара пользователя
Luinnar
Сообщения: 246
ОС: Solaris, Debian, Ubuntu

Re: Обсуждение архиваторов

Сообщение Luinnar »

Оставлял на ночь машину тестировать сжатие системной папки WinXP, и вот результат.
Я так же подправил свой скрипт, раньше он выводил реальное время выполнения, а теперь выводит все три (system/user/real). Сразу видно, где используется многопоточность. Так в 7zip user+system time больше чем real time примерно в два раза, что свидетельствует о двух потоках.
Теперь также отображается степень сжатия в процентах (ratio).

Код: Выделить всё

================================================================
  908M   WindowsXP
----------------------------------------------------------------
type    size        ratio   compress_time   extract_time
----    ----        -----   -------------   ------------
7z      324871378   34%     5.1s/7:10.0u/3:58.8r    2.9s/38.2u/1:07.7r
tar.xz9 351473224   36%     7.8s/10:00.5u/10:24.3r  6.8s/40.0u/1:33.1r
tar.7z  368783128   38%     6.0s/6:45.0u/3:56.1r    7.3s/38.4u/1:18.1r
tar.xz  382059152   40%     6.4s/7:23.5u/7:32.8r    6.1s/42.7u/1:26.8r
tar.lzma 382105892  40%     7.2s/7:19.7u/7:31.7r    6.4s/43.6u/1:24.1r
rar     498867570   52%     13.4s/4:23.0u/3:34.4r   4.5s/23.5u/1:08.9r
tar.xz1 500446472   52%     4.8s/2:40.1u/2:46.3r    6.7s/56.0u/1:30.4r
tar.bz2 513258454   53%     4.0s/3:34.8u/3:44.5r    7.5s/1:39.6u/1:43.3r
tar.gz  527932287   55%     3.7s/51.4u/1:02.0r      6.0s/10.6u/1:10.1r
zip     532835340   55%     2.9s/52.3u/1:08.7r      2.4s/11.6u/59.0r
================================================================


Здесь 7zip победил xz -9 по времени (даже по процессорному времени, то есть если бы он без многопоточности работал), а по степени сжатия они примерно одинаковы. Если сравнить их по сжатию tar архива, то xz -9 на 2% лучше выполнил своё дело, однако 7zip, видимо, смог хорошо перетасовать файлы и без tar'а сжал на 2% лучше, чем tar.xz9. :)
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Обсуждение архиваторов

Сообщение drBatty »

Luinnar писал(а):
19.01.2010 13:47
Я так же подправил свой скрипт

а скрипт можно? :)
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Аватара пользователя
Luinnar
Сообщения: 246
ОС: Solaris, Debian, Ubuntu

Re: Обсуждение архиваторов

Сообщение Luinnar »

drBatty писал(а):
19.01.2010 15:09
Luinnar писал(а):
19.01.2010 13:47
Я так же подправил свой скрипт

а скрипт можно? :)


Выкладываю все три необходимых скрипта: archives_test, gtar7z и gtarxz.
gtar7z и gtarxz - это просто wrapper'ы над tar, 7z и xz для более удобного их использования в основном скрипте archives_test. Путь к gtar7z и gtarxz нужно поместить в PATH или скопировать эти скрипты в одну из папок, которая уже находится в PATH. Для запуска тестирования нужно запустить archives_test с одним единственным параметром - путь к файлу/каталогу для тестирования. Необходимо иметь право записи в текущий каталог.

Все три скрипта можно скачать архивом, см. прикреплённые файлы.

archives_test:

Код: Выделить всё

#!/bin/bash
#
# Purpose:  test and compare various archivators
# Author:   Luinnar
# Modified: 20-Jan-10

tar=gtar
rar="$HOME/bin/rar.exe" # must be without spaces!

tar_version=`$tar --version | head -1 | awk '{print $NF}'`
tar_ver_major=`echo "$tar_version" | awk -F. '{print $1}'`
tar_ver_minor=`echo "$tar_version" | awk -F. '{print $2}'`
tarJ_available=0
(( $tar_ver_major > 2 || $tar_ver_major == 1 && $tar_ver_minor >= 22 )) && tarJ_available=1

dir="$1"
[ -e "$dir" ] || { echo "$dir doesn't exist!"; exit 1; }

# generate absolute path for dir
case "$dir" in
  /*|[a-zA-Z]:*);;
   *) dir="$PWD/$dir";;
esac
dir_for_wine="z:$dir"

arch_name=`basename "$dir"`

echo "================================================================"
echo -n "   $dir: "
dir_size=`du -sk "$dir" | awk '{print $1}'`
(( dir_size *= 1024 ))
echo "$dir_size bytes"

function reformat_time()
{
  time_value=`cat`
  t_real=`echo "$time_value" | awk '/real/{print $2}'`
  t_user=`echo "$time_value" | awk '/user/{print $2}'`
  t_sys=` echo "$time_value" | awk '/sys/ {print $2}'`
  echo "${t_sys}s/${t_user}u/${t_real}r"
}

function report_result()
{
  arch_type="$1"
  arch_size="$2"
  arch_time="$3"
  extr_time="$4"
  (( ratio = 100 * arch_size / dir_size ))

  echo "$arch_type    $arch_size    ${ratio}%    `echo $arch_time`    `echo $extr_time`"
}

function measure_time()
{
  2>&1 time -p $@ > /dev/null | reformat_time
}

function test_archive_low()
{
  ext="$1"
  compress="$2"
  extract="$3"

  rm -rf "$ext"
  mkdir  "$ext" || { echo "Cannot create directory $ext";    return 1; }
  cd     "$ext" || { echo "Cannot change directory to $ext"; return 2; }

  compress_time=`measure_time $compress`
  arch_size=`ls -l "$arch_name.$ext" | awk '{print $5}'`
  extract_time=`measure_time $extract`

  cd .. && rm -fr "$ext"

  report_result "$ext" "$arch_size" "$compress_time" "$extract_time"
}

function test_archive()
{
  ext="$1"
  test_archive_low "$ext" "$2 $arch_name.$ext $dir" "$3 $arch_name.$ext"
}

function which_silent()
{
  which "$1" > /dev/null 2>&1
}

echo "----------------------------------------------------------------"
echo "type    size    ratio    compress_time        extract_time"
echo "----    ----    -----    -------------        ------------"

which_silent xz     && [ "$tarJ_available" -eq 1 ] && test_archive "tar.xz" "$tar cJf" "$tar xJf"
which_silent 7z     && test_archive "7z"       "7z a" "7z x"
which_silent lzma   && test_archive "tar.lzma" "$tar c --lzma -f" "$tar x --lzma -f"
which_silent bzip2  && test_archive "tar.bz2"  "$tar cjf" "$tar xjf"
which_silent gzip   && test_archive "tar.gz"   "$tar czf" "$tar xzf"
which_silent zip    && test_archive "zip"      "zip -r" "unzip"
which_silent gtar7z && test_archive "tar.7z"   "gtar7z c"    "gtar7z x"
which_silent gtarxz && test_archive "tar.xz1"  "gtarxz c -1" "gtarxz x"
which_silent gtarxz && test_archive "tar.xz9"  "gtarxz c -9" "gtarxz x"
which_silent wine   && [ -f $rar ] && test_archive_low "rar" "wine $rar a $arch_name.rar $dir_for_wine" "wine $rar x $arch_name.rar"

echo "================================================================"

exit 0


gtar7z

Код: Выделить всё

#!/bin/bash
#
# Purpose: a wrapper over gtar and 7zip
# Author:  Luinnar

cmd="$1"
arch_name="$2"
shift
shift

# WARNING: do not use p7zip here because it creates a temporary file inside /tmp and then moves it to the real destination
case "$cmd" in
  c) gtar cf - $@ | 7z a -si -bd "$arch_name" > /dev/null;;
  x) 7z x -so -bd "$arch_name" | gtar xf - $@;;
  *) echo "Usage: `basename $0` [c|x] arch_name.tar.7z [files_to_archive]"; exit 2;;
esac


gtarxz:

Код: Выделить всё

#!/bin/bash

cmd="$1"
shift

level=""
case "$1" in
  -[0-9]) level="$1"; shift;;
esac

arch_name="$1"
shift

case "$cmd" in
  c) gtar cf - $@ | xz $level > "$arch_name";;
  x) xz -d < "$arch_name" | gtar xf - $@;;
  *) echo "Usage: `basename $0` [c|x] arch_name.tar.xz [files_to_archive]"; exit 2;;
esac
У вас нет необходимых прав для просмотра вложений в этом сообщении.
Спасибо сказали:
Аватара пользователя
Luinnar
Сообщения: 246
ОС: Solaris, Debian, Ubuntu

Re: Обсуждение архиваторов

Сообщение Luinnar »

Наткнулся на одну неожиданную вещь. Скрипт p7zip, который имеет интерфейс подобный gzip/bzip2/xz, работает через временный файл и сначала ВЕСЬ архив сохраняет в /tmp/p7zipXXXXXX, а потом выводит его с помощью cat! А для распаковки (p7zip -d) он сначала с помощью cat записывает весь архив во временный файл, и только потом распаковывает его. Бред. У нас бэкапы на 44Gb каждый выходят, а он в /tmp/ пишет. Пока перешел на использование

Код: Выделить всё

tar cf - <files> | 7z a -bd -si name.tar.7z > dev/null

и

Код: Выделить всё

7z x -bd -so name.tar.7z 2> dev/null | tar xf -
Спасибо сказали:
Аватара пользователя
drBatty
Сообщения: 8735
Статус: GPG ID: 4DFBD1D6 дом горит, козёл не видит...
ОС: Slackware-current

Re: Обсуждение архиваторов

Сообщение drBatty »

Luinnar писал(а):
20.01.2010 16:07
Скрипт p7zip, который имеет интерфейс подобный gzip/bzip2/xz, работает через временный файл и сначала ВЕСЬ архив сохраняет в /tmp/p7zipXXXXXX, а потом выводит его с помощью cat!

а... то-то я его терпеть не могу... у меня /var & /tmp на отдельных разделах, где часто мало место для такого...
http://emulek.blogspot.ru/ Windows Must Die
Учебник по sed зеркало в github

Скоро придёт
Осень
Спасибо сказали:
Flaming
Сообщения: 2579

Re: Обсуждение архиваторов

Сообщение Flaming »

Luinnar, действительно странно. Ладно бы какой-то буфер использовать... но весь архив в /tmp пихать в 90% случаев глупо. Не поместится.
Спасибо сказали:
Flaming
Сообщения: 2579

Re: Обсуждение архиваторов

Сообщение Flaming »

Luinnar, мне кажется, лучше будет tar -I 7z *** ?
Спасибо сказали:
Аватара пользователя
rm_
Сообщения: 3340
Статус: It's the GNU Age
ОС: Debian

Re: Обсуждение архиваторов

Сообщение rm_ »

А зачем tar.7z? Почему бы не tar.xz?
Доп.возможности 7z (хранение нескольких файлов в одном архиве, юникодовые имена файлов) при таком раскладе ведь всё равно не используем.

Кстати, ещё lzip забыли включить в сравнение. Его хвалят, и дистр Dragora выбрал его для сжатия своих пакетов.
Спасибо сказали: