LINUX.ORG.RU
ФорумTalks

Ситуация с архиваторами в Линуксе и вообще

 ,


2

5

О наболевшем, казалось бы где-где, а в самой популярной Unix-системе с этим должен быть порядок, но что мы имеем на сегодняшний день.

  • zip — отдельная компрессия каждого файла, вследствие чего размер архива неприлично большой;
  • tar.gz — ограничение на длину файла в 100 (!) символов, отсутствие директории содержимого, как результат невозможно просмотреть содержимое архива без его распаковки;
  • 7z — не сохраняет права на файлы;
  • rar — проприетарщина, насколько понимаю также не сохраняет права.

Поправьте если я в чём-то ошибаюсь. Существует ли в принципе популярный архиватор без вышеуказанных проблем, которым пользуется не только его автор?

★★★★★

ограничение на длину файла в 100 (!)

перестань пользоваться mc:

% name="$(seq -s '' 0 100)"       
% echo $name|wc -m
194
% mkdir 1
% touch "1/$name"
% tar czf 1.tgz 1
% rm -rf 1
% tar xf 1.tgz 
% ls -1 1/|wc -m
194
Deleted
()
Последнее исправление: Deleted (всего исправлений: 1)
Ответ на: комментарий от Deleted

В том то и дело, что пользуюсь консольным tar, вернее пользовался, пока не обнаружил, что распаковынные файлы обрезаны. Потом почитал описание формата и присел. Причём консольная утилита даже ошибки не выдаёт, просто портит архив.

Dendy ★★★★★
() автор топика

отсутствие директории содержимого, как результат невозможно просмотреть содержимое архива без его распаковки;

tar tvf?

kirk_johnson ★☆
()
Ответ на: комментарий от Deleted

Немного ошибся, 100 это ограничение длины символических ссылок, ограничение на обычный файл 256 символов, что может было в порядке вещей лет 20 назад, но уж точно не сегодня.

Dendy ★★★★★
() автор топика
Ответ на: комментарий от Dendy

ограничение на обычный файл 256 символов

У меня файловая система больше не может. Ты уверен, что проблема в tar?

kirk_johnson ★☆
()
Ответ на: комментарий от Dendy

Я только слышал что в НТФС что-то поменяли по поводу длин имени файла и собственно пути.


Разве что-то меняли в последние n-лет в ext4?

Deleted
()

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

zip и dmg хватит всем.

Unicode4all ★★★★★
()

Есть новые форматы типа dar или xar. Когда-то интересовался этой темой, да, появляются новые форматы, просто они ещё не «выстрелили».
Из проверенного временем есть squashfs. Параллельное сжатие, удаление дубликатов, права, с именами тоже скорее всего всё отлично. Распаковка - unsquashfs, 7z x или просто подмонтировать образ.

h31 ★★★★
()
Ответ на: комментарий от Dendy

А ты случайно не наркоман, а?

% name="$(seq -s '' 0 122)"
% echo $name|wc -m         
260
% mkdir 1                  
% touch "1/$name"          
touch: невозможно выполнить touch для '1/012345678910111213141516171819202122...': Слишком длинное имя файла
Deleted
()
Последнее исправление: Deleted (всего исправлений: 2)

Хм, вопросец то забавный.
Я вот как запомнил в 97 году что теперь Вин95 могёт в 256символов на файл, на том и застрял.

А что поменялось и в какой ФС?
Т.к. после такого заклинания вся работа сводилась к тому, чтобы не сильно баловаться вложениями и глубинами директорий.

Deleted
()
Ответ на: комментарий от kirk_johnson

tar tvf?

Это работает в случае с tar, но не с tar.gz. Чтобы прочитать список файлов он фактически распаковывает архив на лету.

Dendy ★★★★★
() автор топика
Ответ на: комментарий от Dendy

Это работает в случае с tar, но не с tar.gz. Чтобы прочитать список файлов он фактически распаковывает архив на лету.

А, ты об этом. Ну, да.

kirk_johnson ★☆
()
Ответ на: комментарий от Deleted

ну так vfs же абстракиция над ФС.
хотя ладно, не буду тут мудрствовать, т.к. не специалист в этом тонком вопросе.

Deleted
()
Ответ на: комментарий от Deleted

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

Dendy ★★★★★
() автор топика
Ответ на: комментарий от Deleted

В файловой системе ограничений нет, но tar всё равно сделает битый архив с обрезанными именами.

Dendy ★★★★★
() автор топика
Ответ на: комментарий от Deleted

ну вощем какгбэ да, первым делом надо МС прибить, при большом архиве.
я помню что они у меня все архивы в $TEMP разворачивал полностью.

Deleted
()
Ответ на: комментарий от Deleted

да фиг с ней с распаковкой это дефект архитектуры tar.gz, тут ничего не поделаешь, а вот ребята из mc 6 шесть лет пытаются починить баг который тс приписывает tar:

https://www.midnight-commander.org/ticket/2201

Deleted
()

Сейчас теста ради запаковал крусадером десятимеговую картинку с именем на 133 символа в tar.gz. Всё ок.

dogbert ★★★★★
()

tar.gz — ограничение на длину файла в 100 (!) символов, отсутствие директории содержимого, как результат невозможно просмотреть содержимое архива без его распаковки;

Учим матчасть...

dmxrand
()
Ответ на: комментарий от Deleted

да нет такой проблемы, ТС юзает mc

Я в первом посте написал, что пользуюсь командной строкой. Только что посмотрел, что вариантов формата несколько и для posix- и gnu- версий длина файла не ограничена. Видимо когда-то я наткнулся именно на старый формат.

Но всё равно остаётся проблема с просмотром содержимого без распаковки. К примеру, можно ли распаковать отдельный файл по имени из архива без декомпрессии всего содержимого?

Dendy ★★★★★
() автор топика
Ответ на: комментарий от Dendy

у текущего гнутого тара есть ограничения если ты пакуешь через старые форматы --format . а так у него обычные ограничения консольных утилит на длину пути что-то в районе 4кб.

vtVitus ★★★★★
()
Ответ на: комментарий от Deathstalker

gzip

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

Dendy ★★★★★
() автор топика
Ответ на: комментарий от Dendy

К примеру, можно ли распаковать отдельный файл по имени из архива без декомпрессии всего содержимого?

ты за это ругал zip, уж определись

Deleted
()
Ответ на: комментарий от Deleted

ты за это ругал zip, уж определись

В этом и смысл темы, чтобы понять есть ли архиватор без описанных проблем. Технических проблем ведь для этого нет.

zip это набор склеенных файлов, скомпрессированных по отдельности. tar.gz наоборот, сначала склеивает, потом компрессирует. В первом случае огромный размер, во втором отсутствие быстрого доступа к содержимому. Тот же 7zip, насколько я понимаю, позволяет делать и то и другое и даже разбивать на несколько файлов, причём использовать один словарь для всего содержимого, что позволяет сжать файлы максимально компактно. Но детская проблема с правами на файлы сводит возможности бекапа средствами 7z на нет.

Dendy ★★★★★
() автор топика
Ответ на: комментарий от Dendy

Тот же 7zip, насколько я понимаю, позволяет делать и то и другое

и... внезапно ты не сможешь распаковать произвольный фал в solid архиве не распаковывая все файлы что есть перед ним

Deleted
()
Ответ на: комментарий от Deleted

Да, это понятно. А как на счёт одного словаря на весь архив для максимального сжатия, как в 7z/lzma?

Dendy ★★★★★
() автор топика

Есть ещё такая штука как DAR. Сохраняет вообще всё что возможно и невозможно, права, ссылки, ACL, доп-аттрибуты ... Сам архив жмётся любимым поточным компрессором на выбор пользователя. Для быстрого листинга содержимого можно сделать отдельный внешний файл-индекс архива.

Далее, есть такая штука как squashfs, уделывает tar.gz по уровню сжатия и скорости. Сохраняет все атрибуты и свойства, поддерживает сжатие LZMA с размером блока 1 мегабайт, есть дедупликация на уровне файлов. Не совсем архиватор - по сути является файловой системой в режиме ro, с неё можно запускать бинарники даже. Доступ к данным очень быстрый. Простыми скриптами можно прикрутить автомонтирование образов по щелчку в файловом менеджере - по сути получаем аналог DMG из OSX.

Так что не совсем понимаю, что автору не нравится. Мне вот, лично, наоборот не хватает нормального подобного архиватора в венде.

DawnCaster ★★
()
#define NAME_MAX         255    /* # chars in a file name */
#define PATH_MAX        4096    /* # chars in a path name including nul */

linux/limits.h

post-factum ★★★★★
()

Использую вариант с tar.xz, где xz сжатие временно обеспечивает 7zip, пока xz не научится в дебиане в многопоточность.
Плюсы: высокая степень сжатия, прозрачная поддержка результата любым софтом, слинкованным с zlib.
Недостатки: нет директории содержимого.

aidaho ★★★★★
()

Ну и ещё есть старый добрый cpio. Пользоваться им неудобно правда, так как в отличии от tar'а - ему надо на вход каждый файл передать. Может что и поменялось, я им пользуюсь только в скриптах разных, когда initrd делаю кастомный для кастомных линуксов, наизусть уже ни одной опции из него не помню.

DawnCaster ★★
()
Ответ на: комментарий от DawnCaster

pixz

Ой, спасибо. Я и не знал, что такое есть.
Ну теперь то я полностью определился с идеальным компрессором.

Есть варианты, которые могут навешать txz до 10-15% в моих юзкейсах, но идеальная поддержка со стороны zlib — это киллер-фича.

aidaho ★★★★★
()
Ответ на: комментарий от DawnCaster

Я пробовал: лучший компрессор, и быстрый. Вот он как раз максимальные ~15% и может дать.
Но ни одна софтина слинкованная с zlib не смогла прочитать архив.

aidaho ★★★★★
()
Ответ на: комментарий от Deleted

Я вот как запомнил в 97 году что теперь Вин95 могёт в 256символов на файл, на том и застрял.

На полный путь.

Black_Shadow ★★★★★
()

А чё там с xz?

UVV ★★★★★
()

ограничение на длину файла в 100 (!) символов

Хм. А у меня ядро Linux запаковано в tar.gz, где размеры файлов явно больше 100 символов.

Black_Shadow ★★★★★
()

Да, с гуями для архиваторов в линуксе туго. Вот был p7zip хороший гуй одно время на gtk2, открывал все архивы, но потом переписали на gtk3, поломали всё что только можно, а потом и вовсе выпилили гуй. (

With ★☆☆
()
Ответ на: комментарий от Deleted

Это проблема vfs, а не конкретных фс.

Нет, это ограничения конкретных ФС. Через FUSE, например, можно файлы с 1024 байтами в имени создавать. А он через ту же VFS цепляется.

i-rinat ★★★★★
()
Ответ на: комментарий от Dendy

В файловой системе ограничений нет

Ну, как минимум ext4 и reiserfs ограничивают имя файла (не путь к нему, а именно имя файла) 256 байтами.

kirk_johnson ★☆
()

Архивация — это tar, а компрессия — это всего лишь дополнительный бонус (я сейчас при компрессии использую xz — ключик J в tar). И да, быстрый доступ к файлам архива тебе никто не обещал, так как хоть сколько-нибудь особого смысла в этом нет.

Evgueni ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.