У меня есть куча gzip-файлов, которые я должен время от времени конвертировать в bzip2. В настоящее время я использую сценарий оболочки, который просто 'gunzip' каждый файл, а затем 'bzip2 его. Хотя это работает, для завершения требуется много времени.
Можно ли сделать этот процесс более эффективным? Я готов совершить погружение и посмотреть исходные коды gunzip и bzip2, если это необходимо, но я просто хочу быть уверен в выигрыше. Есть ли надежда на повышение эффективности процесса?
источник
pbzip2
упоминание. В случае , если ссылка не сработал ни для кого другого, вот страница проекта и страница человека .Интересно, а не gunzip на одном шаге и bzip2 на другом, было бы более эффективно использовать трубы. Что-то типа
gunzip --to-stdout foo.gz | bzip2 > foo.bz2
Я думаю, с двумя или более процессорами, это определенно будет быстрее. Но, возможно, даже с одним ядром. Я позорно признаюсь, что не испытал это, все же.
источник
bzip2
иgzip
не работать параллельно, используя канал, вы можете заставить их работать параллельно, потому что канал неявно запускает два процесса, которые будут работать параллельно. Так что по крайней мере декомпрессия и сжатие будут выполняться параллельно.bzip2
использование ЦП превосходит егоgunzip
, поэтому на практике получаемый здесь параллелизм минимален. Не нужно делать дисковый ввод-вывод, все равно приятно!Параллельная версия GNU ( http://www.gnu.org/software/parallel ) может быть полезна, если у вас несколько ядер (или даже несколько машин):
Прочитайте учебник / справочную страницу для деталей и опций.
источник
То, что ты сейчас делаешь, - твоя лучшая ставка. Нет доступных инструментов для конвертации, и попытка bzip2 уже сжатого gzip-файла на самом деле не вариант, так как он часто имеет нежелательные эффекты. Поскольку алгоритм отличается, преобразование будет включать в себя извлечение исходных данных независимо. Если, конечно, gzipping не был шагом в процессе bzip2, к сожалению, это не так.
источник
gzip
использует Leimpel-Ziv 77, в то время какbzip2
использует Burrows-Wheeler. Боюсь, разные алгоритмы.Иногда мне нужно делать то же самое с файлами журналов. Сначала я начинаю с самых маленьких файлов * .gz (
ls -rS
), gunzip, а затем и bzip2 по отдельности. Я не знаю, можно ли направить выход gunzip непосредственно на вход bzip2. Команда bzip2 намного медленнее при сжатии, чем gunzip при распаковке, что может потреблять память и пространство подкачки на хосте.Улучшения или предложения приветствуются. Вот мой единственный вкладыш:
источник
Если у вас их несколько, прочитайте статью в ЖЖ с хорошим сценарием оболочки.
http://linuxgazette.net/123/bechtel.html
7zip получает лучшее сжатие, и является многопоточным.
источник
Просто пришлось сделать это несколько минут назад:
Где
rezip
будет определяться как:При желании вы также можете сделать его многопоточным, используя
-P
опцию сxargs
, но будьте осторожны с этим. (Начните с низкого!)источник