Какой самый быстрый метод сжатия для большого количества файлов?

14

Мне нужно сжать каталог с примерно 350 000 довольно маленьких файлов общим объемом около 100 ГБ. Я использую OSX и в настоящее время использую стандартный инструмент «Compress», который преобразует этот каталог в ZIP-файл. Есть ли более быстрый способ сделать это?

колос
источник
Вы, вероятно, не можете разбить tar, поскольку он на самом деле не сжимает, а только архивирует, без специальных опций, которые это позволяют. В ответах я хотел бы видеть доказательства, никакого мнения ...
Даниэль Бек
1
Зависит от того, сколько сжатия вы хотите.
ta.speot.is
1
Я использовал tar и по соображениям скорости еще не пытался сжать его. Это было в состоянии завершить вовремя для того, для чего я нуждался в этом. Благодарность!
Спайк
@DanielBeck, проблема с tar в том, что они не показывают дерево каталогов. Таким образом, чтобы получить «представление», нам нужно распаковать весь этот tar. Есть ли альтернативы tar, который показывает представление каталога?
Pacerier

Ответы:

15

Для каталогов я бы использовал tarканал bzip2с максимальным сжатием.

простой способ пойти,

tar cfj archive.tar.bz2 dir-to-be-archived / 

Это прекрасно работает, если вы не собираетесь извлекать небольшие наборы файлов из архива
и просто планируете извлекать все это в любое время и в любом месте.
Тем не менее, если вы делаете хотите получить небольшой набор файлов из его не так уж плохо.

Я предпочитаю вызывать такие архивы filename.tar.bz2и извлекать с xfjопцией ' '.

Труба с максимальным сжатием выглядит так,

tar cf - dir-to-be-archive / | bzip2 -9 -> archive.tar.bz2  
# ^ отправьте tar-архив отсюда, чтобы заархивировать ^ в файл архива. 

Примечание: метод ' bzip2' и большее сжатие, как правило, медленнее, чем обычные gzipиз ' tar cfz'.

Если у вас быстрая сеть и архив будет размещен на другом компьютере,
вы можете ускорить передачу по сети (эффективно используя две машины вместе).

tar cf - dir / | ssh user @ server "bzip2 -9 -> /target-path/archive.tar.bz2"  
# ^ передать архив по сети в zip ^ и архивировать на удаленной машине.

Некоторые ссылки,

  1. Linux Journal: Сравнение инструментов сжатия , 28 июля 2005 г.
    • это также относится к сайту MaximumCompression, упомянутомуDennis
  2. gzip против bzip2 , 26 августа 2003 г.
  3. Быстрый тест: Gzip против Bzip2 против LZMA , 31 мая 2005 г.
Nik
источник
2
Спрашивающий попросил самый быстрый способ, а разархивирование 100-гигабайтного гудрона заняло бы всю жизнь! Наступает момент, когда дисковое пространство становится настолько дешевым, что затрачивать эоны на то, чтобы выжать все возможные биты избыточности, - это просто бессмысленная трата ресурсов, если только в этом нет необходимости. Поскольку большая часть использования диска занимает свободное пространство, gzip-архив с -1, вероятно, сделает эту работу достаточно хорошо и позволит перейти к следующей задаче несколькими месяцами ранее!
Энди Ли Робинсон
Хотя я согласен с тем, что файл объемом 100 ГБ, вероятно, не стоит сжимать полностью, я не думаю, что bzip2 будет занимать линейно больше времени для 100 ГБ по сравнению с 1 ГБ (скажем). Хотелось бы увидеть некоторую теорию или данные, чтобы показать оба пути.
Ник
Я понимаю, что словарь bzip2 является адаптивным, поэтому он постоянно ищет новые избыточности в своем окне поиска до конца файла. С учетом однородности энтропии файла, он должен быть относительно линейным. Это был бы плохой компрессор, который предполагал, что у него есть все, что нужно с начала файла, чтобы иметь возможность быстро сжимать все остальное, но в некоторых случаях это может быть все, что нужно, хотя есть лучшие способы состариться, чем работать с ним. эмпирически с 100 ГБ наборов данных!
Энди Ли Робинсон
7

Этот парень провел некоторое исследование по этому вопросу. Похоже, что .zip сжимает большие файлы быстрее. Тем не менее, это дает один из самых больших размеров сжатия. Похоже, он использовал утилиты Windows, но держу пари, что утилита OSX почти так же оптимизирована.

Это отличный веб-сайт, на котором множество утилит сжатия были протестированы на скорость работы со многими файлами. На этом сайте есть много других тестов, которые вы можете посмотреть, чтобы определить лучшую для вас утилиту.

Большая часть скорости связана с программой, которую вы используете. Я использовал утилиту 7zip для Windows, и я считаю, что это очень быстро. Однако сжатие многих файлов занимает много времени, несмотря ни на что, поэтому я просто позволил бы этому работать в одночасье. Или вы можете просто распаковать все это, а не сжимать его ... Лично я ненавижу разархивировать большие архивы, поэтому буду осторожен, если вы захотите это сделать.

Деннис
источник
0

Я предпочитаю использовать

tar cf - dir-to-be-archived/ | bzip2 -9 - > archive.tar.bz2

для перемещения файлов на другой сервер и одновременного их покрытия

Уссама Фахд
источник
1
Что уже предложено в верхнем ответе @nik. Не нужно дублировать для акцента, просто добавьте другой ответ или добавьте комментарий, если у вас есть что-то существенное, но вы не хотите давать ответ. ; о)
pbhj