Tar zst, чем открыть

Обновлено: 06.07.2024

В нашем проекте мы используем правила репозитория для загрузки и распаковки готовых библиотек C++. Из-за большого размера архива мы оценивали различные алгоритмы сжатия. Одним интересным кандидатом (который также поддерживается CMake) является Zstandard. Сейчас он недоступен в Bazel.

Компрессор Apache Commons теперь поддерживает zstd через библиотеку zstd-jni. К сожалению, он основан на собственной библиотеке.

Я подготовил тестовую ветку с некоторыми ярлыками в gjasny/zstd-decompression и хотел бы спросить, не рассмотрите ли вы возможность добавления поддержки сжатия Zstandard, учитывая неприглядную реализацию JNI.

(В aircompressor доступна собственная реализация, но отсутствует поддержка Big Endian и Stream)

Текст был успешно обновлен, но возникли следующие ошибки:

глубокий комментарий от 27 апреля 2020 г.

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

gjasny прокомментировал 27 апреля 2020 г.

Что может помешать внедрению zstd, так это зависимость от zstd-jni, но это должны решить специалисты по сопровождению Bazel.

laurentlb прокомментировал 27 апреля 2020 г.

Знаете ли вы, насколько велика зависимость? Мы хотели бы избежать значительного увеличения размера двоичного файла Bazel.

nevion прокомментировал 27 апреля 2020 г.

aiuto прокомментировал 27 апреля 2020 г.

Параллельное сжатие заставляет меня беспокоиться о воспроизводимости. Это гарантия?

прокомментировал nevion 27 апреля 2020 г. •

Да, стоит отметить, что первый шаг — это поддержка extract/downloadAndExtract, позволяющая использовать zstd.

комментарий meisterT прокомментировал 28 апреля 2020 г.

Может быть, дешевле включить в библиотеку только распаковочную часть?

прокомментировал nevion 28 апреля 2020 г.

@meisterT может быть, немного в глуши. Есть ли какие-либо активы, которые вы можете повторно сжать с помощью zstd до безубыточности или лучше?

с включенным сжатием libzstd:
-O3

Установка ZSTD_LIB_COMPRESSION=0 и сборка,
-O3 (по умолчанию):

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

комментарий meisterT прокомментировал 29 апреля 2020 г.

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

glukasiknuro прокомментировал 18 августа 2020 г.

@gjasny, не могли бы вы добавить комментарий "@googlebot, я согласен" к приведенному выше PR, чтобы он мог включать ваши коммиты?

Закрыто. Этот вопрос не соответствует правилам переполнения стека. В настоящее время ответы не принимаются.

Хотите улучшить этот вопрос? Обновите вопрос, чтобы он соответствовал теме Stack Overflow.

Закрыт 1 год назад.

Я не знаю, как распаковать файл с расширением .zst или tar.zst. Полное имя файла: - file.pkg.tar.zst или file.xz.tar.zst


6 ответов 6

Расширение .zst означает, что архив сжат zstd.

Команда tar имеет параметр -I (--use-compress-program), чтобы указать команду для сжатия/распаковки.

Вы можете использовать его следующим образом.

@user1271772 Возможно, он не установлен. Для Debian sudo apt-get install zstd. yum или любой другой для других дистрибутивов.

Есть ли способ не устанавливать ничего лишнего? У меня нет разрешения sudo на сервере. Я бы предпочел не копировать файл на другую машину, распаковывать и передавать обратно.

Если вы хотите извлечь, вам нужно выбрать unzstd . У меня сработало следующее: tar --use-compress-program=unzstd -xvf archive.tar.zst

Распакуйте его в Терминале.


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

@rubo77 Для меня это работает с двоеточием, нужно обновить или что-то в этом роде. Но я предполагаю, что ваша оболочка не работает и, возможно, заключает ее в кавычки с помощью '' или "" , или вы можете просто избежать ее с помощью \.

Если у вас есть стандартный стек сборки cmake + gcc:


как человек без прав root, этот ответ был удивительно полезным и полным. Не могу отблагодарить вас в достаточной степени

В macOS Mojave 10.14.3 мне не удалось указать алгоритм сжатия с помощью флага -I. Такой способ сработал для меня;

Установите zstd с помощью brew, если он еще не установлен.

  1. Распаковка из .zst: unzstd имя_файла.tar.zst или zstd -d имя_файла.tar.zst . будет создан файл имя.tar.
  2. Список сжатых архивов: tar tf имя_файла.tar .
  3. Извлеките сжатый архив: tar xf имя_файла.tar .

Надеюсь, это поможет.


Я не совсем понимаю, что вы имели в виду, но zstd — это утилита, реализующая алгоритм сжатия zstandard.

Я нашел некоторые из этих файлов в загрузках Anaconda. После того, как я установил Anaconda, я загружал дополнительные пакеты. Загруженные пакеты в моем каталоге загрузки Anaconda были zip-файлами (без расширения .zip), но внутри них были эти файлы .tar.zst. Это привело меня к stackoverflow, чтобы выяснить, что это такое, что привело меня к этому вопросу. Если вы находитесь в той же лодке, то Анаконда также дает ответ.

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

Загрузите библиотеку Python, после чего вы сможете использовать Python следующим образом:



Вот почему есть . Код не полный. Название вопроса ОП было «Как распаковать». Я ответил на это.

Это полезно, избавило меня от дальнейших проблем с добавлением пакета в git-for-windows (MSYS2), избегая всевозможных обручей. И это работает в Windows. Используется python -m pip install zstandard для установки модуля.

Я надеюсь, что когда-нибудь 7-Zip будет поддерживать Zstandard, .tar.zst становится все более и более распространенным, и приходится указывать людям в Windows, что нужно установить либо modern7z (плагин 7z для нескольких новых алгоритмов сжатия), либо использовать zstd из CLI. сложный.

Меня всегда смущал популярный способ сжатия tar-архивов. Если небольшая часть архива gz, xz, zst и т. д. будет повреждена, вы потеряете все после нее, что лишает смысла использование потокового формата, такого как Tar.

Алгоритмы, которые могут восстанавливать данные после повреждения, такие как bzip2 и lzip, в наши дни мало используются

В 99,9% случаев, если архив .tar.gz поврежден, я не хочу восстанавливать данные — я хочу повторно загрузить их с другого зеркала, потому что это исходный код и это, вероятно, вообще не будет работать с какой-либо коррупцией.

Иногда у вас нет выбора. Скачивание исторических архивов, у которых нет других копий, попытка восстановить их в максимально возможной степени.

- если вы знаете, что tar поддерживает ваш каталог/метаданные, вам не нужно искать, сохранит ли zst эту информацию

Не думаю, что люди скажут, что используют tar, потому что это потоковый формат. Они используют его, потому что он упаковывает файлы/каталоги в файл

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

Если я предполагаю, что мне, возможно, придется иметь дело с какой-либо формой повреждения данных (например, с долговременными архивными носителями), я бы предпочел добавить уровень, такой как PAR2 [0]. Вместо того, чтобы довольствоваться фразой «если файл tar поврежден, я вероятно восстановлю большую часть содержимого», кодирование стирания дает мне уверенность в том, что я определенно смогу восстановить все содержимое. содержимое, с уверенностью, что оно не повреждено, если у меня достаточно данных о четности.

Никто больше не использует Tar таким образом. В настоящее время Tar используется как более гибкая замена ZIP, это вполне мог бы быть CPIO, но у tar гораздо лучший интерфейс командной строки.

однако только для Windows (и для сторонних разработчиков).

Это именно то, что я процитировал в своем комментарии. Однако в Linux в этом нет необходимости, учитывая, что в каждой среде есть хорошая программа для архивирования (например, Ark или File Roller), поддерживающая zstandard.

Давайте поговорим о сжатии. Как пользователь Linux, вы, вероятно, уже знакомы с давними основными продуктами, такими как gzip, bzip2 и xz. Они существуют уже некоторое время, и почти все уже хотя бы наткнулись на них, если не используют их активно на регулярной основе.

Как будто этого уже недостаточно, на арене сжатия появился новичок. Zstandard (часто сокращенно zstd) был выпущен в 2015 году, и с тех пор его популярность резко возросла. Zstandard был создан разработчиком из Facebook. С тех пор Zstandard постоянно используется компанией для сжатия больших объемов данных.

В мире Linux официальное принятие новых стандартов может быть довольно медленным, но Zstandard получает большую поддержку со стороны таких дистрибутивов, как Arch Linux, который перешел с xz на Zstandard для сжатия пакетов в официальном репозитории еще в 2019 году.

Почему Zstandard?

Я слышу тебя.«Зачем использовать Zstandard? Я уже использую сжатие gzip (или xz, или 7-zip).» Что ж, zstd работает быстро. Очень быстро. В наших тестах сжатия Zstandard был значительно быстрее, чем gzip, bzip2, xz, 7-zip и пара других методов сжатия. Проверьте результаты ниже.

< th scope="col">Команда < td>943 МБ < tr>
Сжатие Размер Прошедшее время
gzip 955 МБ 1:45 tar cfz files.tar.gz files/
xz 856 МБ< /td> 16:06 tar cfJ files.tar.xz files/
bzip2 5:36 tar cfj files.tar.bz2 files/
7zip 851 МБ 10:59 7z a files.7z files/
zip 956 МБ 1:41 zip -r files.zip files/
rar 877 МБ 6:37 rar a files.rar files/*
zstd 934 МБ 0:43 tar --zstd -cf files.tar.zst files/

В этом преимущество zstd — в скорости. Для сжатия 1350 МБ до 934 МБ потребовалось всего 43 секунды. Сравните это с gzip, которому потребовалась целая дополнительная минута, чтобы выполнить ту же работу, и все же не удалось так радикально уменьшить размер.

Теперь Zstandard — это не новый ответ на все вопросы. Даже при использовании максимального уровня сжатия он не может сравниться с уменьшением размера, предлагаемым xz и 7-zip. Но эй, Zstandard больше заботит быстрый результат, и я уверен, что многие из вас тоже.

Установите Zstandard в Linux

В вашем дистрибутиве Linux Zstandard может быть уже установлен по умолчанию. Если нет, используйте соответствующую команду ниже, чтобы установить его с помощью диспетчера пакетов вашей системы.

Ubuntu, Debian и Linux Mint:

Fedora, AlmaLinux, CentOS и RHEL:

Arch Linux и Manjaro:

Как использовать Zstandard в Linux

Ознакомьтесь с некоторыми из приведенных ниже команд, чтобы узнать, как использовать сжатие Zstandard в Linux, которое включает команду zstd и команду tar.

Пример 1. Zstandard использует расширение файла .zst. Вы можете создать сжатый архив zstd из одного файла, используя следующий синтаксис.

Пример 2. Чтобы распаковать архив zstd, используйте параметр -d.

Вместо этого вы также можете использовать команду unzstd.

Пример 3. Если вы хотите сжать каталог или объединить несколько файлов в один архив, вам потребуется использовать tar для создания архива, а затем сжать его с помощью zstd. Вам нужно будет добавить параметр --zstd вместе с любыми другими выбранными вами флагами.

В качестве альтернативы мы могли бы использовать параметр a с командой tar, которая выберет правильный метод сжатия на основе указанного расширения файла (в данном случае zst).

Пример 4. Используйте следующую команду tar, чтобы открыть архив Zstandard.

Кроме того, параметр a может снова сэкономить нам несколько нажатий клавиш.

Параметры сжатия Zstandard

Мы уже рассмотрели основные команды zstd и tar, которые необходимо знать для сжатия Zstandard. Однако есть и другие параметры, которые можно использовать для управления скоростью сжатия и эффективностью Zstandard. См. приведенные ниже примеры, чтобы узнать о них.

Пример 1. Уровень сжатия Zstandard по умолчанию равен 3, но можно установить любой параметр в диапазоне от 1 до 19. Более высокое значение приведет к уменьшению размера сжатого архива за счет более низкой скорости сжатия. Следующая команда установит zstd для использования уровня сжатия 8.

Чтобы использовать этот параметр сжатия с tar , вам нужно использовать параметр -I и указать команду zstd и ее дополнительные параметры, которые вы хотите использовать.

Пример 2. Zstandard также поддерживает уровни ультрасжатия 20–22, доступ к которым можно получить с помощью параметра --ultra. Вот как получить максимальный уровень сжатия от zstd.

Вы можете добиться сверхсжатия Zstandard для каталогов или нескольких файлов с помощью следующей команды tar.

Пример 3. Параметр --fast Zstandard использует сверхбыстрые уровни сжатия. Вам нужно указать номер с опцией. Чем выше число, тем быстрее будет сжатие за счет некоторой степени сжатия. По умолчанию простое использование --fast (без числа) подразумевает уровень 1.

А вот соответствующая команда tar для использования настройки сверхбыстрого сжатия Zstandard.

Заключение

Zstandard – новейший и самый быстрый инструмент сжатия в Linux. В этом руководстве вы узнали, как установить его и использовать команды zstd и tar для использования Zstandard. Мы показали вам все самые важные команды, которые вам понадобятся. Если вы считаете, что мы что-то пропустили, сообщите нам об этом в комментариях ниже.

Если наш контент помог вам, угостите нас кофе. Мы ценим вашу поддержку!

Читайте также: