Як розпакувати тарбол, який використовує .xz?


776

Я звик добувати тарболи з -xfzпрапором, який обробляє архіви gzip та bzip2.

Нещодавно я зіткнувся з .tar.xzфайлом, і мені хотілося б розпакувати його за один крок, використовуючи tar, як це зробити?


10
зауважте, що вам, можливо, доведеться встановити, xz-utilsякщо його ще немає
Tobias Kienzler

ось мій маленький сценарій, який відгадує
shime

2
tar --helpсписки tarпрапорів. -xzfзастосовується до gzip. -xjfдо bz2. -xJfдо xz.
noobninja

Відповіді:


1017

Ubuntu включає в себе GNU tar, який розпізнає формат сам по собі! Одна команда працює з будь-яким підтримуваним методом стиснення відповідно до посібника .

tar xf archive.tar.xz
tar xf archive.tar.gz
tar xf archive.tar

і т.д. Якщо смола дає Cannot execпомилку, вам може знадобитися sudo apt install xz-utilsспочатку.


41
Це особливість дьогтю GNU. Я не знаю про конкуруючі реалізації, але гуркіт GNU повинен бути найбільш релевантним для ubuntu. gnu.org/software/tar/manual/tar.html#SEC131
ramslök

42
якщо ви зіткнетесь tar: xz: Cannot exec: No such file or directory, встановіть xz-utils:sudo apt-get install xz-utils
Collin Anderson

10
Це не відповідь, це "ти не хвилюєшся відповіді, хоча ти і попросив" відповідь. Запасіться думкою для людей, які не є "останніми"
Шон Хуліхане

6
Яка версія tarбільше не вимагає конкретного прапора?
Марк Томлін

8
@SeanHoulihane, це не відповідь, оскільки ОП задало незначну проблему XY . ramslök дав ОП краще, ніж просили, і це включало ефективне "Ви не переймаєтесь відповіддю, хоч і запитували", що було доречно, оскільки це було правдою.
Крістос Хейвард

331

Спробуйте

tar -xJf file.pkg.tar.xz

Це -Jпрапор, який спеціально стосується файлів .xz.


59
Цікаво, скільки у нас буде прапорів у 2020 році. Як ... 45 різних компресій? Знання перемикачів смоли - це вже чорний пояс у Linux-fu. : /
Шикі

22
@Shiki: Тому, ймовірно, це не змушує вас більше задавати прапор формату стиснення. (Див. Відповідь ramslök.)
Nate CK


6
Це має бути повністю прийнятою відповіддю, оскільки вона відповідає на питання щодо будь-якої версії підтримки смоли.xz
pospi

8
У 2030 році прапори стають тюрінгами завершеними ... 2040 вони стають чутливими
user1359

80

Якщо чомусь tarрішення не працюють (можливо, ви використовуєте вбудовані ОС X X), спробуйте:

unxz < file.tar.xz > file.tar

… Що еквівалентно:

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

Потім використовуйте tarдля зняття файлу.


2
Це має бути сконструйоване за допомогою труби.
Герріт

6
Я відчуваю, що ви могли просто зробити unxz < file.tar.xz | tar xчи подібне.
тридцять тридцятиріччя

7
це працювало для мене, де tar xfне було. ubuntu 12.04
philshem

Принаймні, на моїй машині Ubuntu, unxzце не рівнозначно xz -dc, а xz -d. Таким чином , щоб отримати file.tar.xzдо file.tar, ви б просто написати unxz file.tar.xz. Якщо ви хочете еквівалент xz -dc, декомпресія до stdout, використовуйте xzcat. Наприклад xzcat file.tar.xz | tar x.
nwellnhof

30

xz - компресор даних без втрат. Вам доведеться витягнути кульку дьогтю з xz, а потім витягнути дьоготь:

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

Тоді ви знаєте, як витягти дьоготь

tar -xf my_archive.tar

Джерело: XZ Utils - Вікіпедія .


1
Найкраща відповідь. xzне потрібно перенаправлення stdout. Ще краще:unxz -k
Марк Єронімус

@MarkJeronimus Я не вважаю це таким гарним, оскільки створює проміжний файл. Використання смоли або труби GNU потребує менших ресурсів.
Мелебій

15

У мене була така ж проблема, tar xfкоманда не змогла її витягти. Щоб виправити це, вам потрібно встановити xz-utilsпакет. Рішення було:

sudo apt-get install xz-utils

тоді:

tar xf myfile.tar.xz

14
tar -xvf package.tar.xz

-x - витягувати файли

-v - багатослівний список файлів, що обробляються

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


5

Просто хочу додати, що якщо у вас є стара версія 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

4

Якщо tar розпізнає формат стиснення, вам не потрібен прапор:

tar xvf *.tar.xz

Якщо вам потрібно розпакувати введення вручну, наприклад, тому що ваш тар занадто старий, щоб розпізнати xz, або вам потрібен спеціальний шлях:

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

Труби швидше, ніж створювати нестиснений проміжний файл, і використовувати менше місця на диску!



3

Нічого собі, це справді добре. Це було зроблено з 7zip на Mac? Спробуйте це:

7z x -so file.tar.xz | tar xf -

Потрібен 7z, що не те, що він хоче - він хоче зробити це повністю в гудроні.
jrg

Так, спасибі - "xz" отримав мене! Що ж, це все одно один крок :) І tar J= tar xz, тому ми навіть можемо писати tar xzf file.tar.xzяк "нормальне" tar xvfz file.tar.gz. Так що в основному різниці немає. Перед використанням перемикача не потрібна тире.

Це майже як відповідь, дана у запитанні. :)

Мене теж скинули, тому що tar zxf помилився у файлі .xz, я вважаю, що просто використовувати J весь час було б шляхом.
Хорхе Кастро

2
Так! Сторінка керівництва не синхронізується з джерелом: buffer.c використовує -J для lzma.

3

Ubuntu поставляється з Python (Python 2.7 та Python 3), який містить необхідні модулі для вилучення архівів. Тож якщо з якоїсь причини tarвідсутня команда (скажімо, ваш sysadmin видалив її, і ви не маєте sudoprivillege для її встановлення), ви можете використовувати:

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()функцію.


0

unar це дуже приємна проста програма і проста в наборі, для зняття з архіву майже будь-якого формату, включаючи 7z та RAR

це, мабуть, написано в (GNU) Objective-C, і тому вимагає встановлення деяких gnustep(реалізація GNU Objective-C) бібліотек ( gnustep-base-runtimeі libgnustep-base1.25)

якщо ви використовуєте --install-offers або налаштували aptдля встановлення запропонованих пакетів, unarзапропонують та встановлять багато програм GUI GNUStep, які не є тим, що ви хочете

sudo apt install --no-install-suggests unar 
unar linux-source.tar.xz

це створить каталог виводу linux-sourceавтоматично.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.