Как распаковать tarball, который использует .xz?

Я использую для извлечения tarballs с флагом -xfz, который обрабатывает архивы gzip и bzip2.

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

640 голосов | спросил Jorge Castro 3 Jam1000000amTue, 03 Jan 2012 03:41:17 +040012 2012, 03:41:17

10 ответов


837

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.

ответил ramslök 26 FebruaryEurope/MoscowbSun, 26 Feb 2012 21:41:03 +0400000000pmSun, 26 Feb 2012 21:41:03 +040012 2012, 21:41:03
281

Попробуйте

tar -xJf file.pkg.tar.xz

-J - это флаг, который специально обрабатывает файлы .xz.

ответил jrg 3 Jam1000000amTue, 03 Jan 2012 03:42:59 +040012 2012, 03:42:59
67

Если по какой-то причине решения tar не работают (возможно, потому, что вы используете встроенные модули OS X), попробуйте следующее:

unxz < file.tar.xz > file.tar

â € |, что эквивалентно:

xz -dc < file.tar.xz > file.tar

Затем используйте tar, чтобы распаковать файл.

ответил Mathias Bynens 20 Jam1000000amMon, 20 Jan 2014 00:05:12 +040014 2014, 00:05:12
22

xz - это компрессор данных без потерь. Вам нужно будет извлечь tar-мяч из xz, а затем извлечь tar:

unxz my_archive.tar.xz      # results in my_archive.tar

Затем вы знаете, чтобы извлечь tar

tar -xf my_archive.tar

Источник: XZ Utils - Википедия .

ответил Foxx 23 Maypm14 2014, 22:44:12
11

У меня была та же проблема, команда tar xf не смогла ее извлечь. Чтобы исправить это, вам нужно установить пакет xz-utils. Решение было:

sudo apt-get install xz-utils

, то

tar xf myfile.tar.xz
ответил Zsolt Sky 14 FebruaryEurope/MoscowbSat, 14 Feb 2015 21:44:44 +0300000000pmSat, 14 Feb 2015 21:44:44 +030015 2015, 21:44:44
7

Что насчет

tar -xvf package.tar.xz

-x - извлечь файлы

-v - обработанные текстовые файлы списка

-f - использовать указанный файл архива

ответил nsane 5 MarpmWed, 05 Mar 2014 21:16:10 +04002014-03-05T21:16:10+04:0009 2014, 21:16:10
3

Если tar распознает формат сжатия, вам не нужен флаг:

tar xvf *.tar.xz

Если вам нужно распаковать вход вручную, например, потому что ваш tar слишком старый, чтобы распознать xz, или вам нужен специальный путь:

xz -cd *.tar.xz | tar xvf -

Трубы быстрее, чем создание несжатого промежуточного файла, а также меньше места на диске!

ответил Orion Lawlor 4 FebruaryEurope/MoscowbWed, 04 Feb 2015 09:13:58 +0300000000amWed, 04 Feb 2015 09:13:58 +030015 2015, 09:13:58
3

Просто хочу добавить, что если у вас есть старая версия 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
ответил ScottH 4 thEurope/Moscowp30Europe/Moscow09bEurope/MoscowFri, 04 Sep 2015 04:21:54 +0300 2015, 04:21:54
2

Ничего себе, это действительно хорошо. Это было сделано с 7zip на Mac? Попробуйте следующее:

7z x -so file.tar.xz | tar xf -
ответил 3 Jam1000000amTue, 03 Jan 2012 04:06:21 +040012 2012, 04:06:21
0

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().

ответил Sergiy Kolodyazhnyy 8 J0000006Europe/Moscow 2018, 11:36:34

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132