Обычно ни gzip, ни tar не могут создать «самый маленький tar.gz». Есть много утилит сжатия, которые могут сжимать до формата gz. Я написал Баш скрипт « gz99 » , чтобы попробовать gzip
, 7z
и , advdef
чтобы получить файл наименьшего. Чтобы использовать это для создания наименьшего возможного запуска файла:
tar c path/to/data | gz99 file.gz
advdef
Утилита от AdvanceCOMP обычно дает наименьший размер, но и глючит (то gz99
утилита проверяет , что он не поврежден файл , прежде чем принять выход advdef
). Для advdef
непосредственного использования создайте файл .tar.gz так, как вам хочется. Затем запустите:
advdef -z -4 file.tar.gz
Это создаст стандартный файл gz, который может быть прочитан gzip и tar как обычно, чуть меньше. Это лучшее из того, что вы можете сделать с форматом gz.
Поскольку вы только недавно узнали, что tar может сжимать, и не сказали, зачем вам нужен самый маленький файл ".tar.gz", вы можете не знать, что есть более эффективные форматы, которые можно использовать с файлами tar, например, xz. Как правило, переключение на другой формат может дать намного лучшее улучшение сжатия, чем перебор с опциями gzip. Основным недостатком xz является то, что он не так распространен, как gzip, поэтому людям, которым вы отправляете файл, возможно, придется установить новый пакет. Это также имеет тенденцию быть немного медленнее, особенно при сжатии. Если это не имеет значения для вас, и вы действительно хотите самый маленький файл tar, попробуйте:
tar cv path/to/data | xz -9 > file.tar.xz
Современные версии tar, например в Ubuntu 13.10, автоматически обнаруживают сжатые файлы. Так что даже если вы используете сжатие xz, вы все равно можете распаковать как обычно:
tar xvf file.tar.xz
Чтобы быстро понять, как сравниваются эти утилиты сжатия, рассмотрим эффект сжатия patch-3.1.1 из ядра Linux:
utility cpu format size(bytes)
gzip -9 0.02s gz 105,628
advdef -2 0.07s gz 102,619
7z -mx=9 -tgzip 0.42s gz 102,297
advdef -3 0.55s gz 102,290
advdef -4 0.75s gz 101,956
xz -9 0.03s xz 91,064
xz -3e 0.15s xz 90,996
В этом тривиальном примере мы видим, что для получения наименьшего gz нам нужен advdef (хотя 7z -tgzip почти так же хорош и намного менее глючит). Мы также видим, что переключение на xz дает нам гораздо больше места, чем попытка выжать максимум из старого формата gz без сжатия, которое занимает слишком много времени.