Який найшвидший метод стиснення для великої кількості файлів?


14

Мені потрібно стиснути каталог, який містить близько 350 000 досить невеликих файлів, обсяг яких становить близько 100 ГБ. Я використовую OSX і в даний час використовую стандартний інструмент "Стиснення", який перетворює цей каталог у файл .zip. Чи є швидший спосіб зробити це?


Напевно, ви не можете перемогти tar, оскільки він насправді не стискає, а лише архівує, не маючи конкретних опцій, які це дозволяють. У відповідях я хотів би бачити докази, не думати ...
Даніель Бек

1
Залежить, скільки потрібно стиснення.
ta.speot.is

1
Я все-таки використовував дьоготь, і з міркувань швидкості ще не намагався його стиснути. Це вдалося вчасно виконати те, що мені було потрібно. Спасибі!
Спайк

@DanielBeck, Проблема з дьогтем полягає в тому, що вони не показують дерево каталогів. Тож, щоб навіть отримати «вид», нам потрібно розпакувати весь цей дьоготь. Чи є альтернативи для tar, що показує подання каталогу?
Pacerier

Відповіді:


15

Для каталогів я б використовував tarтрубопровід bzip2з максимальною компресією.

простий шлях -

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

Це чудово спрацьовує, якщо ви не збираєтесь витягувати з архіву невеликі набори файлів
і просто плануєте витягувати все, коли / де потрібно.
Тим НЕ менше, якщо ви робите хочете отримати невеликий набір файлів з його НЕ так уже й погано.

Я вважаю за краще називати такі архіви filename.tar.bz2та витягувати з xfjопцією ' '.

Максимальна компресійна труба виглядає так,

tar cf - dir-to-be-archive / | bzip2 -9 -> archive.tar.bz2  
# ^ труба тарболу звідси, щоб ввести ^ в архівний файл. 

Примітка. bzip2Метод " " і більше стиснення мають тенденцію бути повільнішими, ніж звичайні, ніж gzip" tar cfz".

Якщо у вас швидка мережа, і архів буде розміщений на іншій машині,
ви можете пришвидшити за допомогою труби по всій мережі (ефективно використовуючи дві машини разом).

смола cf - dir / | ssh user @ server "bzip2 -9 -> /target-path/archive.tar.bz2"  
# ^ pipe pipe tarball через мережу, щоб поштовувати ^ та архівувати на віддаленій машині.

Деякі посилання,

  1. Linux Journal: Інструменти стиснення порівняно , 28 липня 2005 року
  2. gzip vs. bzip2 , 26 серпня 2003 року
  3. Швидкий орієнтир: Gzip проти Bzip2 проти LZMA , 31 травня 2005 року

2
Опитуючий запитав про найшвидший метод, а відбиття смоли 100 Гб зайняло б усе життя! Існує сенс, коли дисковий простір буде настільки дешевим, що брати еонів, щоб вичавити кожен останній можливий надмір, це просто безглузда трата ресурсів, якщо це абсолютно не потрібно. З більшою частиною використання диска, зайнятого в слабкому просторі, gzipping tar з -1, ймовірно, зробить роботу досить добре і дозволить перейти до наступного завдання на кілька місяців раніше!
Енді Лі Робінсон

Хоча я погоджуюся, що 100 Гб файл, ймовірно, не варто стискати в сукупності, я не думаю, що bzip2 займе лінійно більше часу для 100 Гб порівняно з 1 Гб (скажімо). Хочеться побачити якусь теорію чи дані, щоб показати будь-який спосіб.
nik

Я розумію, що словник bzip2 адаптивний, тому він постійно шукає нових надмірностей у своєму вікні пошуку до кінця файлу. За умови однорідності ентропії файлу вона повинна бути відносно лінійною. Було б поганим компресором, який припускав, що він мав все необхідне з початку файлу, щоб можна було швидко стиснути решту, але в деяких випадках це може бути все, що потрібно, хоча є кращі способи постаріти, ніж працювати емпірично із наборами даних 100 ГБ!
Енді Лі Робінсон,

7

Цей хлопець провів кілька досліджень з цього приводу. Здається, що .zip швидше стисне великі файли. Однак він дає один з найбільших розмірів стиснення. Схоже, він користувався утилітами Windows, але я вважаю, що корисність OSX майже настільки ж оптимізована.

Ось чудовий веб-сайт, на якому численні утиліти стиснення були орієнтовані на швидкість над багатьма файлами. На цьому сайті є багато інших тестів, які ви можете подивитися, щоб визначити найкращу корисність для вас.

Значна частина швидкості пов'язана з програмою, яку ви використовуєте. Я використовував утиліту 7zip для Windows, і вважаю, що це дуже швидко. Однак стискання багатьох файлів займає багато часу, незалежно від того, я б просто відпустив це протягом ночі. Або ти можеш просто націлити всю річ, а не стискати її ... Особисто я ненавиджу розпаковування великих архівів, тому я буду обережним, якщо це ти хочеш зробити.


0

Я вважаю за краще використовувати

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

для переміщення файлів на інший сервер і охоплення їх одночасно


1
Що вже запропоновано у верхній відповіді від @nik. Не потрібно дублювати наголоси, просто підкресліть іншу відповідь або додайте коментар, якщо у вас є щось предметне, але ви не хочете давати відповідь, що стосується. ; o)
pbhj
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.