Come posso decomprimere un tarball che utilizza .xz?


775

Sono abituato a estrarre tarball con una -xfzbandiera, che gestisce gli archivi gzip e bzip2.

Di recente mi sono imbattuto in un .tar.xzfile e vorrei decomprimerlo in un solo passaggio utilizzando tar, come posso farlo?


10
nota che potresti dover installare xz-utilsse non già presente
Tobias Kienzler

ecco la mia piccola sceneggiatura che indovina le bandiere tar per te: gist.github.com/shime/5908634
shime

2
tar --helpelenca le tarbandiere. -xzfsi applica a gzip. -xjfa bz2. -xJfa xz.
Noobninja,

Risposte:


1016

Ubuntu include GNU tar, che riconosce il formato da solo! Un comando funziona con qualsiasi metodo di compressione supportato, per il manuale .

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

ecc. Se tar dà un Cannot execerrore, potrebbe essere necessario sudo apt install xz-utilsprima.


41
È una caratteristica di GNU tar. Non conosco implementazioni concorrenti, ma GNU tar dovrebbe essere il più rilevante per Ubuntu. gnu.org/software/tar/manual/tar.html#SEC131
ramslök

42
se ti imbatti tar: xz: Cannot exec: No such file or directory, installa xz-utils:sudo apt-get install xz-utils
Collin Anderson l'

10
Questa non è una risposta, è una risposta "non ti interessa la risposta, anche se hai chiesto". Risparmia un pensiero per le persone che non sono in "ultimo"
Sean Houlihane,

6
Quale versione di tarnon richiede più il flag specifico?
Mark Tomlin,

8
@SeanHoulihane, non è una risposta perché l'OP ha posto un piccolo problema XY . ramslök ha dato l'OP meglio di quanto richiesto, e questo includeva un efficace "Non ti interessa la risposta, anche se hai chiesto", il che era appropriato perché era vero.
Christos Hayward,

331

Provare

tar -xJf file.pkg.tar.xz

Il -Jè la bandiera che si occupa specificamente con i file .xz.


59
Mi chiedo quante bandiere avremo nel 2020. Come ... 45 diverse compressioni? Conoscere i tar switch è già una cintura nera in Linux-fu. : /
Shiki

22
@Shiki: probabilmente è per questo che non ti fa più specificare il flag del formato di compressione. (Vedi la risposta di ramslök.)
Nate CK


6
Questa dovrebbe essere la risposta accettata dal momento che risponde alla domanda per qualsiasi versione di supporto tar.xz
pospi

8
Nell'anno 2030 le bandiere diventano Turing complete ... 2040 diventano senzienti
1359

80

Se per qualche motivo le tarsoluzioni non funzionano (forse perché stai utilizzando i built-in OS X), prova questo:

unxz < file.tar.xz > file.tar

... che equivale a:

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

Quindi utilizzare tarper decomprimere il file.


2
Quello dovrebbe essere costruibile con un tubo.
Gerrit,

6
Sento che potresti semplicemente fare unxz < file.tar.xz | tar xo simili.
trentatreesimo

7
questo ha funzionato per me, dove tar xfno. ubuntu 12.04
philshem

Almeno sulla mia macchina Ubuntu, unxznon è equivalente a xz -dc, ma a xz -d. Quindi, per estrarre file.tar.xza file.tar, devi semplicemente scrivere unxz file.tar.xz. Se vuoi un equivalente a xz -dc, decomprimendo a stdout, usa xzcat. Per esempio xzcat file.tar.xz | tar x.
nwellnhof,

30

xz è un compressore di dati senza perdita di dati. Dovrai estrarre la palla tar da xz e quindi estrarre il tar:

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

Quindi sai di estrarre un catrame

tar -xf my_archive.tar

Fonte: XZ Utils - Wikipedia .


1
Migliore risposta. xznon necessita di reindirizzamento stdout. Ancora meglio:unxz -k
Mark Jeronimus,

@MarkJeronimus Non lo trovo così buono poiché crea un file intermedio. L'uso di tar GNU o pipe dovrebbe richiedere meno risorse.
Melebio

15

Ho avuto lo stesso problema, il tar xfcomando non è stato in grado di estrarlo. Per risolvere questo problema, è necessario installare il xz-utilspacchetto. La soluzione era:

sudo apt-get install xz-utils

poi:

tar xf myfile.tar.xz

14
tar -xvf package.tar.xz

-x - estrai i file

-v - elenca verbalmente i file elaborati

-f - usa il file di archivio specificato


5

Voglio solo aggiungere che se hai una vecchia versione di GNU tar precedente alla versione 1.22 quando sono diventate disponibili le opzioni --xz e -J, puoi comprimere o decomprimere i file tar.xz usando --use-compress-program xz. Per esempio,

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

o

tar --use-compress-program xz -xf example.tar.xz

4

Se tar riconosce il formato di compressione, non è necessario un flag:

tar xvf *.tar.xz

Se devi decomprimere manualmente l'input, ad esempio perché tar è troppo vecchio per riconoscere xz o hai bisogno di un percorso speciale:

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

Le pipe sono più veloci della creazione di un file intermedio non compresso e utilizzano anche meno spazio su disco!



3

Caspita, è davvero bello. È stato fatto con 7zip su un Mac? Prova questo:

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

Richiede 7z, che non è quello che vuole - vuole farlo interamente in catrame.
jrg

Sì, grazie - la "xz" mi ha preso! Bene, è comunque un passo :) E tar J= tar xz, quindi potremmo anche scrivere tar xzf file.tar.xzcome "normale" tar xvfz file.tar.gz. Quindi praticamente nessuna differenza. Non è necessario alcun trattino prima di utilizzare l'interruttore.

È quasi come se la risposta fosse stata data nella domanda. :)

Anche io sono stato scartato perché tar zxf ha erroneamente eliminato il file .xz, suppongo che solo usando J tutto il tempo sarebbe la strada da percorrere.
Jorge Castro,

2
Sì! La pagina di manuale non è sincronizzata con l'origine: buffer.c usa -J per lzma.

3

Ubuntu viene fornito con Python (Python 2.7 e Python 3), che contiene i moduli necessari per l'estrazione degli archivi. Quindi, se per qualsiasi motivo tarmanca il comando (supponiamo che il tuo amministratore di sistema lo abbia rimosso e non hai il sudoprivilegio di installarlo), puoi usare:

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

Come una breve sceneggiatura, è più leggibile come:

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

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

Supponiamo di aver creato un .xzfile con tar cJf thing.xz /etc/passwd. L'archivio conterrà la etcdirectory con il passwdfile all'interno. Usando lo script sopra si otterrà una etcdirectory creata nella directory di lavoro corrente e al suo interno sarà un passwdfile. Naturalmente, questo può sempre essere esteso specificando il percorso in cui si desidera estrarre all'interno della extractall()funzione.


0

unar è un bel programma semplice e facile da scrivere, per archiviare quasi tutti i formati inclusi 7z e RAR

sembra essere scritto in (GNU) Objective-C e quindi richiede l'installazione di alcune gnusteplibrerie (implementazione di GNU Objective-C) ( gnustep-base-runtimee libgnustep-base1.25)

se usi --install-suggerisce o hai configurato aptl'installazione dei pacchetti suggeriti, unarsuggerirai e installerai molti programmi GNUStep con GUI che non sono quelli che desideri

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

creerà linux-sourceautomaticamente la directory di output .

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.