MyTetra Share
Делитесь знаниями!
Как упаковывать и распаковывать архивы *.xz (без tar и вместе с ним)
Время создания: 21.11.2022 14:00
Автор: xintrea
Текстовые метки: linux, архив, упаковка, распаковка, xz, tar, unxz, tar.xz, архиватор, формат, расширение, команда, опции
Раздел: Компьютер - Linux - Архиваторы
Запись: xintrea/mytetra_syncro/master/base/1669028406e6fdq9r65e/text.html на raw.github.com

В состав современных Linux-дистрибутивов входит пакет xz-utils, который содержит архиватор формата xz. Данный формат может использоваться как совместно с архиватором tar (получаются файлы с расширением *.tar.xz), так и отдельно, тогда файлы архивов именуются с расширением *.xz.





Формат xz- это очень компактный формат, имеющий максимально высокую степень сжатия, даже по меркам 2022 года. По сравнению с обычным zip, архивы xz могут занимать в ~3 раза меньше места.



Бинарник архиватора формата *.xz так и называется xz. По неизвестной причине, в Debian-based дистрибутивах Linux делают еще и линк unxz, ссылающийся на бинарник xz. По логике вещей, unxz должен уметь только разархивировать *.xz-файлы, но на деле "распаковщик" unxz может так же и упаковывать файлы. Похоже, что бинарник xz умеет понимать, под каким именем (линком) его запустили, и в случае если он запущен как unxz и никаких опций не указано, он по умолчанию запускает режим распаковки (см. ниже).


В любом случае программа xz умеет как упаковывать, так и распаковывать файлы. Опции командной строки следующие:



$ xz --help

Usage: xz [OPTION]... [FILE]...

Compress or decompress FILEs in the .xz format.


-z, --compress force compression

-d, --decompress force decompression

-t, --test test compressed file integrity

-l, --list list information about .xz files

-k, --keep keep (don't delete) input files

-f, --force force overwrite of output file and (de)compress links

-c, --stdout write to standard output and don't delete input files

-0 ... -9 compression preset; default is 6; take compressor *and*

decompressor memory usage into account before using 7-9!

-e, --extreme try to improve compression ratio by using more CPU time;

does not affect decompressor memory requirements

-T, --threads=NUM use at most NUM threads; the default is 1; set to 0

to use as many threads as there are processor cores

-q, --quiet suppress warnings; specify twice to suppress errors too

-v, --verbose be verbose; specify twice for even more verbose

-h, --help display this short help and exit

-H, --long-help display the long help (lists also the advanced options)

-V, --version display the version number and exit


With no FILE, or when FILE is -, read standard input.



Архиватор xz по своему принципу работы устроен так же, как и архиватор gzip (поддерживающий формат gz). А это значит, что xz обладает следующими особенностями:



  • Архиватор xz - это потоковый архиватор, который способен упаковывать/распаковывать только один файл. А это значит, что если файлов несколько, то их нужно прогонять через утилиту tar, и выходной поток этой утилиты засовывать в xz. В тоге получится файл формата tar.xz.
  • Если натравить утилиту xz на любой файл, не имеющий расширения *.xz, и при этом не указывать ни одной опции, то данный файл будет упакован в формат *.xz, после чего исходный файл будет удален.
  • И наоборот, если данной утилите дать имя unxz или создать на нее линк с именем unxz, и натравить unxz на любой файл с расширением *.xz, и при этом не указывать ни одной опции, то архив будет распакован в обычный файл, после чего архив будет удален.



Если нужно дать однозначную команду упаковки или распаковки файла, можно воспользоваться опциями --compress или --decompress. Однако нужно помнить, что и при их использовании исходный файл будет удаляться. Чтобы исходные файлы не удалялись, можно воспользоваться опцией --keep.



Примеры


1. Упаковать файл file.txt:


xz file.txt


или


xz --compress file.txt


Получится упакованный файл file.txt.xz. Исходный файл file.txt будет удален.



2. Распаковать файл file.txt.xz:


unxz file.txt.xz


или


xz --decompress file.txt.xz


Получится файл file.txt. Исходный архив file.txt.xz будет удален.



3. Упаковать все файлы в текущем каталоге и всех подкаталогах:


tar -Jcvf allfiles.tar.xz *


Исходные файлы удаляться не будут.


Хинт! Архиватор xz умеет использовать многопоточность при упаковке. Для использования одного потока на одно физическое ядро, можно воспользоваться опцией -T0. Чтобы tar передал xz опцию использования многопоточности для упаковки файлов, команда упаковки будет выглядеть так:


tar -cvf allfiles.tar.xz --use-compress-program='xz -T0' *


Чтобы видеть информацию о ходе упаковки, можно пользоваться опцией -v:


tar -cvf allfiles.tar.xz --use-compress-program='xz -vT0' *



4. Распаковать архив формата *.tar.xz:


tar -Jxvf allfiles.tar.xz


Исходный архив allfiles.tar.xz удален не будет.


Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования