Как распаковать tarball, который использует .xz?
Я использую для извлечения tarballs с флагом -xfz
, который обрабатывает архивы gzip и bzip2.
Недавно я запустил файл .tar.xz
, и я хотел бы распаковать его за один шаг, используя tar
, как я могу это сделать?
10 ответов
Ubuntu включает GNU tar, который распознает формат сам по себе! Одна команда работает с любым поддерживаемым методом сжатия, в руководстве .
tar xf archive.tar.xz
tar xf archive.tar.gz
tar xf archive.tar
и т.д.. Если tar дает ошибку Cannot exec
, вам может понадобиться sudo apt install xz-utils
.
Попробуйте
tar -xJf file.pkg.tar.xz
-J
- это флаг, который специально обрабатывает файлы .xz.
Если по какой-то причине решения tar
не работают (возможно, потому, что вы используете встроенные модули OS X), попробуйте следующее:
unxz < file.tar.xz > file.tar
â € |, что эквивалентно:
xz -dc < file.tar.xz > file.tar
Затем используйте tar
, чтобы распаковать файл.
xz - это компрессор данных без потерь. Вам нужно будет извлечь tar-мяч из xz, а затем извлечь tar:
unxz my_archive.tar.xz # results in my_archive.tar
Затем вы знаете, чтобы извлечь tar
tar -xf my_archive.tar
Источник: XZ Utils - Википедия .
У меня была та же проблема, команда tar xf
не смогла ее извлечь.
Чтобы исправить это, вам нужно установить пакет xz-utils
.
Решение было:
sudo apt-get install xz-utils
, то
tar xf myfile.tar.xz
Что насчет
tar -xvf package.tar.xz
-x
- извлечь файлы
-v
- обработанные текстовые файлы списка
-f
- использовать указанный файл архива
Если tar распознает формат сжатия, вам не нужен флаг:
tar xvf *.tar.xz
Если вам нужно распаковать вход вручную, например, потому что ваш tar слишком старый, чтобы распознать xz, или вам нужен специальный путь:
xz -cd *.tar.xz | tar xvf -
Трубы быстрее, чем создание несжатого промежуточного файла, а также меньше места на диске!
Просто хочу добавить, что если у вас есть старая версия GNU tar до версия 1.22, когда стали доступны опции -xz и -J, вы можете сжимать или распаковывать файлы tar.xz с помощью --use-compress-program xz
. Например,
tar --use-compress-program xz -cf example.tar.xz file1 file2 file3
или
tar --use-compress-program xz -xf example.tar.xz
Ubuntu поставляется с Python (Python 2.7 и Python 3), который содержит необходимые модули для извлечения архивов. Поэтому, если по какой-либо причине отсутствует команда tar
(скажем, ваш sysadmin удалил ее, и у вас нет sudo
privillege, чтобы установить ее), можно использовать:
python3 -c 'import tarfile,sys; b = tarfile.open(sys.argv[1]);print(b.extractall())' ./archive.xz
Как короткий сценарий, это более читаемо, как:
#!/usr/bin/env python3
import tarfile,sys
with tarfile.open( sys.argv[1] ) as fd:
fd.extractall()
Предположим, что я создал файл .xz
с tar cJf thing.xz /etc/passwd
. В архиве будет содержаться каталог etc
с файлом passwd
внутри. Использование приведенного выше сценария приведет к созданию каталога etc
, созданного в вашем текущем рабочем каталоге, и внутри него будет файл passwd
. Конечно, это всегда можно расширить, указав путь, в котором вы хотите извлечь из функции extractall()
.