Jak rozpakować plik tar, który używa .xz?

776

Jestem przyzwyczajony do wyodrębniania -xfzarchiwów z flagą, która obsługuje archiwa gzip i bzip2.

Ostatnio natknąłem się na .tar.xzplik i chciałbym go rozpakować w jednym kroku za pomocą tar, jak mogę to zrobić?

Jorge Castro
źródło
10
Uwaga: może być konieczne zainstalowanie, xz-utilsjeśli jeszcze nie jest obecne
Tobias Kienzler
oto mój mały skrypt, który zgaduje dla ciebie flagi tar: gist.github.com/shime/5908634
shime
2
tar --helpwyświetla tarflagi. -xzfdotyczy gzip. -xjfdo bz2. -xJfdo xz.
noobninja

Odpowiedzi:

1017

Ubuntu zawiera GNU tar, który sam rozpoznaje format! Jedno polecenie działa z dowolną obsługiwaną metodą kompresji, zgodnie z instrukcją .

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

itp. Jeśli tar Cannot execwyświetla błąd, być może trzeba go sudo apt install xz-utilsnajpierw.

ramslök
źródło
41
Jest to funkcja GNU tar. Nie wiem o konkurencyjnych implementacjach, ale tar GNU powinien być najbardziej odpowiedni dla Ubuntu. gnu.org/software/tar/manual/tar.html#SEC131
ramslök
42
jeśli napotkasz tar: xz: Cannot exec: No such file or directory, zainstaluj xz-utils:sudo apt-get install xz-utils
Collin Anderson
10
To nie jest odpowiedź, to odpowiedź „nie przejmujesz się odpowiedzią, nawet jeśli zapytałeś”. Oszczędźcie myśli dla ludzi, którzy nie są na „najnowszych”
Sean Houlihane
6
Która wersja tarnie wymaga już konkretnej flagi?
Mark Tomlin
8
@SeanHoulihane, to nie jest odpowiedź, ponieważ OP zadał niewielki problem XY . ramslök dał PO lepiej, niż został poproszony, i obejmował skuteczny „Nie przejmujesz się odpowiedzią, mimo że pytałeś”, co było właściwe, ponieważ to prawda.
Christos Hayward,
331

Próbować

tar -xJf file.pkg.tar.xz

Jest -Jto flaga, która dotyczy konkretnie plików .xz.

jrg
źródło
59
Zastanawiam się, ile flag będziemy mieć w 2020 roku. Na przykład ... 45 różnych ucisków? Znajomość przełączników tar to już czarny pas w Linux-fu. : /
Shiki,
22
@Shiki: Prawdopodobnie dlatego nie oznacza to, że określasz już flagę formatu kompresji. (Patrz odpowiedź ramslöka.)
Nate CK
27
xkcd.com/1168
Wordzilla
6
To powinna być całkowicie zaakceptowana odpowiedź, ponieważ odpowiada na pytanie dotyczące dowolnej wersji tar-a obsługującego.xz
pospi
8
W roku 2030 flagi stają się Turing zakończone ... 2040 stają się odczuwalne
1359
80

Jeśli z jakiegoś powodu tarrozwiązania nie działają (być może dlatego, że używasz wbudowanych OS X), spróbuj tego:

unxz < file.tar.xz > file.tar

… Co odpowiada:

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

Następnie użyj tardo rozpakowania pliku.

Mathias Bynens
źródło
2
To powinno być możliwe do zbudowania za pomocą rury.
gerrit
6
Wydaje mi się, że możesz po prostu to zrobić unxz < file.tar.xz | tar x.
trzydziesty trzydziesty
7
to działało dla mnie, gdzie tar xfnie. ubuntu 12.04
philshem
Przynajmniej na moim komputerze Ubuntu unxznie jest równoważny xz -dc, ale do xz -d. Tak, aby wyodrębnić file.tar.xzsię file.tar, że po prostu napisać unxz file.tar.xz. Jeśli chcesz mieć odpowiednik xz -dcdekompresujący na standardowe wyjście, użyj xzcat. Na przykład xzcat file.tar.xz | tar x.
nwellnhof
30

xz to bezstratny kompresor danych. Będziesz musiał wyodrębnić smołę z Xz, a następnie wyodrębnić smołę:

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

Więc wiesz, jak wyodrębnić smołę

tar -xf my_archive.tar

Źródło: XZ Utils - Wikipedia .

Foxx
źródło
1
Najlepsza odpowiedź. xznie wymaga przekierowania standardowego. Jeszcze lepiej:unxz -k
Mark Jeronimus
@ MarkJeronimus Nie uważam tego za dobre, ponieważ tworzy plik pośredni. Używanie GNU tar lub potoku powinno wymagać mniej zasobów.
Melebius
15

Miałem ten sam problem, tar xfpolecenie nie było w stanie go wyodrębnić. Aby to naprawić, musisz zainstalować xz-utilspakiet. Rozwiązaniem było:

sudo apt-get install xz-utils

następnie:

tar xf myfile.tar.xz
Zsolt Sky
źródło
14
tar -xvf package.tar.xz

-x - Rozpakuj pliki

-v - pełna lista przetworzonych plików

-f - użyj określonego pliku archiwum

nsane
źródło
5

Chcę tylko dodać, że jeśli masz starszą wersję tar GNU przed wersją 1.22, kiedy opcje --xz i -J stały się dostępne, możesz kompresować lub dekompresować pliki tar.xz za pomocą --use-compress-program xz. Na przykład,

tar --use-compress-program xz -cf example.tar.xz file1 file2 file3

lub

tar --use-compress-program xz -xf example.tar.xz
ScottH
źródło
4

Jeśli tar rozpozna format kompresji, nie potrzebujesz flagi:

tar xvf *.tar.xz

Jeśli musisz ręcznie zdekompresować dane wejściowe, na przykład dlatego, że tar jest za stary, aby rozpoznać Xz, lub potrzebujesz specjalnej ścieżki:

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

Potoki są szybsze niż tworzenie nieskompresowanego pliku pośredniego i zajmują mniej miejsca na dysku!

Orion Lawlor
źródło
4

Lubię dtrx

sudo apt install dtrx
dtrx your-file.tar.xz
Boris
źródło
3

Wow, to naprawdę dobre. Czy zrobiono to z 7zip na Macu? Spróbuj tego:

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

źródło
Wymaga 7z, co nie jest tym, czego chce - chce to zrobić całkowicie w tar.
jrg
Tak, dziękuję - „xz” mnie dopadło! Cóż, i tak jest o krok :) I tar J= tar xz, więc możemy nawet pisać tar xzf file.tar.xzjak „normalnie” tar xvfz file.tar.gz. W zasadzie nie ma różnicy. Przed użyciem przełącznika nie jest wymagana kreska.
To prawie tak, jak na pytanie udzielono odpowiedzi. :)
Zostałem również wyrzucony, ponieważ tar zxf został zignorowany w pliku .xz, przypuszczam, że używanie J przez cały czas byłoby dobrym rozwiązaniem.
Jorge Castro,
2
Tak! Strona podręcznika nie jest zsynchronizowana ze źródłem: buffer.c używa -J dla lzma.
3

Ubuntu zawiera Python (Python 2.7 i Python 3), który zawiera moduły niezbędne do wypakowywania archiwów. Więc jeśli z jakiegoś powodu tarbrakuje polecenia (powiedz, że twój sysadmin go usunął i nie masz sudouprawnień do jego instalacji), możesz użyć:

python3 -c 'import tarfile,sys; b = tarfile.open(sys.argv[1]);print(b.extractall())' ./archive.xz 

W skrócie jest to bardziej czytelne, ponieważ:

#!/usr/bin/env python3
import tarfile,sys

with tarfile.open( sys.argv[1] ) as fd:
    fd.extractall()

Załóżmy, że utworzyłem .xzplik tar cJf thing.xz /etc/passwd. Archiwum będzie zawierać etckatalog z passwdplikiem w środku. Użycie powyższego skryptu spowoduje etcutworzenie katalogu w bieżącym katalogu roboczym, w którym będzie passwdplik. Oczywiście można to zawsze rozszerzyć, określając ścieżkę, do której chcesz wyodrębnić extractall()funkcję.

Sergiy Kolodyazhnyy
źródło
0

unar jest całkiem fajnym prostym programem i łatwym do pisania, do archiwizacji prawie dowolnego formatu, w tym 7z i RAR

wydaje się, że jest napisany w (GNU) Objective-C, a zatem wymaga instalacji niektórych gnustepbibliotek (implementacja Objective-C GNU) ( gnustep-base-runtimei libgnustep-base1.25)

jeśli użyjesz opcji --install-sugeruje lub skonfigurowałeś się aptdo instalowania sugerowanych pakietów, unarzasugeruje i zainstaluje wiele programów GUI GNUStep, które nie są tym, czego chcesz

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

automatycznie utworzy katalog wyjściowy linux-source.

kot
źródło