
Мне нужно создавать сжатые архивы файлов и иметь возможность быстро извлекать из них отдельные файлы/каталоги.
Проблема в том, что, например, tar.bz2, похоже, не лучший выбор для такой задачи — извлечение одного файла размером 4 КБ из архива объемом 200 МБ (50000 файлов) на моем компьютере занимает 17 секунд.
Существует ли какой-либо формат архива, который обеспечивает быстрый экспорт отдельных файлов из архива (и работает на Linux)?
решение1
пикс— параллельная индексная версия xz.
# Compress:
tar -I pixz -cf foo.tar.xz ./foo
# Decompress:
tar -I pixz -xf foo.tar.xz
# Very quickly list the contents of the compressed tarball:
pixz -l foo.tar.xz
# Very quickly extract a single file:
pixz -x dir/file < foo.tar.xz | tar x
решение2
Формат Zip сжимает каждый файл по отдельности, а затем объединяет их (с каталогом содержимого архива) в один архивный файл.
решение3
В дополнение к уже упомянутому формату zip, утилиты dar
и dump
также хорошо справляются с этим, и в отличие от zip сохраняют разрешения unix. Для dar
тех, кто хочет избежать использования опции сплошного архива, так как это возвращает нас к методу tar/gzip сжатия всего сразу, что обеспечивает лучшее сжатие, но делает извлечение отдельных файлов более долгим, так как весь файл должен быть распакован, пока не будет найден нужный файл. dump
довольно хорошо справляется с большими наборами небольших файлов (десятки тысяч) и может выполнять многопоточное сжатие, но он читает только файловые системы ext[234].
решение4
.tar.gz
имеет более высокую скорость декомпрессии, но зато имеет худший размер сжатия. Редактировать: Игнасио Васкес-Абрамс меня переплюнул.