Чи існує формат стиснення, який підтримує операції з хвостом?


12

Я шукаю формат стиснення, який підтримує tailредагування. Значить, вам не потрібно читати весь файл, щоб отримати останні X нестиснені байти. Чи можливо це в будь-якому з таких форматів, як bzip2, xz, lzma тощо?

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

Кінцева мета цього - це файли журналів, які я можу виписати стиснутими, а потім мати змогу в tailних (навіть коли вони не були повністю записані; тобто потокові), не чекаючи, коли вся річ буде прочитана з диска чи мережі.

Відповіді:


5

gzip має опцію --rsyncable, яка робить по суті те ж саме . Нестандартною частиною буде утиліта "ztail", відома блоку gzip-block, але, здається, ви вже з цим розібралися.


2
Звичайно, ця опція ефективно обмежує вас до чогось типу -0,5 рівня стиснення, навіть якщо ви вказуєте -9.
psusi

звідки ви отримуєте версію gzip, яка підтримує це? Якщо це був варіант в один момент, воно, здається, було видалено.
Патрік

У дистрибутивах на основі Debian є його - це від Ubuntu 10.04: root @ backup1: ~ # gzip -V gzip 1.3.12 root @ backup1: ~ # gzip -h | egrep rsync --rsyncable Зробити архів, сприятливий для rsync
1111

Мабуть, деякі інші засоби, що підтримують дистрибуцію (наприклад, Fedora), схоже, включили також патчі. Тут ви знайдете патч на старий gzip: samba.org/netfilter/diary/gzip.rsync.patch, який може застосуватись до більш нової версії з незначними модифікаціями, якщо вам справді потрібно самокомпілювати.
the wabbit

До речі, обговорення свідчать, що вплив на стиснення є досить незначним (в межах 2-3%), хоча пробіг для конкретного набору даних може відрізнятися. Якщо вам потрібна компресія за допомогою "адаптації" за допомогою адаптивних алгоритмів, таких як дефляція, навряд чи можна буде скидати алгоритм час від часу - звичайно, це призведе до ефективності стиснення.
the wabbit

0

FWIW: Я розробив інструмент командного рядка , на ZLIB в zran.c вихідного коду , який створює індекси для GZIP файлів: https://github.com/circulosmeos/gztool

Він може створити безперервний хвіст файлу gzip з -Tопцією. Або просто хвіст останнього вмісту і зупиніться, використовуючи -t(Багато інших варіантів).

Зауважте, що для будь-якої з цих дій gztoolбуде створений файл індексу, переплетений із цією дією.

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

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.